0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 40
|
|
1 | |
Как сделать "Старт", "Пауза", Стоп"?26.12.2012, 11:11. Показов 15846. Ответов 71
Метки нет (Все метки)
Доброго времени суток,
как сделать так, чтобы при нажатии на кнопку начиналось цикличное действие (рисование например) и продолжалось бы пока не будет нажата другая кнопка. Грубо говоря, как сделать "Старт", "Пауза", Стоп".
0
|
26.12.2012, 11:11 | |
Ответы с готовыми решениями:
71
C++ Threads или как запрограммировать кнопку Старт и Стоп нужно сделать кнопки старт и пауза для движущихся фигур В билдеровском MediaPlayer-е кнопка стоп работает как пауза? Одна форма, кнопки старт и стоп. Как остановить? Через интерфейсе (GUI) сделать кнопку стоп, старт, пауза |
96 / 96 / 21
Регистрация: 25.04.2012
Сообщений: 449
|
||||||||||||||||
26.12.2012, 11:15 | 2 | |||||||||||||||
объявите глобальную переменную
0
|
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 40
|
|
26.12.2012, 11:33 [ТС] | 3 |
Сделал, не получается, ведь, действительно, программа постоянно выполняет тело цикла, и как бы "зависает", т.е. выполняет тело, но нажать на другие кнопки не получается.
0
|
96 / 96 / 21
Регистрация: 25.04.2012
Сообщений: 449
|
|
26.12.2012, 13:04 | 4 |
Вам необходимо запускать своё "действие" в потоке. И кнопками старт\стоп запускать или прерывать выполнение потока.
boost::thread CreateThread выбирайте что-то из этого первое довольно простое(по крайней мере в изложении и представлении программисту, ну это с моей точки зрения) второе стандартное и неудобное, зато не надо париться с установкой буста без многопоточности пожалуй не обойтись
0
|
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 40
|
|
27.12.2012, 22:13 [ТС] | 5 |
А как это реализовать?
Добавлено через 23 часа 21 минуту Хоть намекните как сделать. Добавлено через 1 час 26 минут Неужели никто не может помочь?
0
|
96 / 96 / 21
Регистрация: 25.04.2012
Сообщений: 449
|
|
27.12.2012, 22:30 | 6 |
http://bit.ly/Ubclw4
даже не благодари открываешь например википедию, смотришь пример кода для многопоточности. только из этого примера все становится довольно понятно(ну я понял) потом ищешь документацию на русском(или читаешь на английском на сайте буста) на буст. ищешь главу thread. и читаешь, и подстраиваешь под свой код. как скачать boost есть в инете. если скачать, скомпилировать и правильно установить буст у тебя не получается, как вариант, скачай embarcadero rad studio xe, это с++ билдер, у него буст встроен по умолчанию.
0
|
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 40
|
|||||||||||
27.12.2012, 23:29 [ТС] | 7 | ||||||||||
Все равно поблагодарю,
теме не менее не выходит, у меня установлена Embarcadero RAD Studio, я посмотрел примеры, но ничего не выходит, вот например, простейший код который нашёл, так у меня на треть секунды появляется окно и пропадает:
0
|
96 / 96 / 21
Регистрация: 25.04.2012
Сообщений: 449
|
|
27.12.2012, 23:34 | 8 |
я когда-то сильно читал документацию на буст-тред, но уже все забыл.
там много нюансов, всякие мютексы, прерывания и прочее прочее. честно, я дальше не знаю как быть, но то что вам надо - это многопоточность 100%. на ноуте были в закладках ссылки на русскую документацию бусттред, скинуть могу только завтра. там все довольно подробно написано. поищите сами, я в свое время тоже же нашел )
1
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|
27.12.2012, 23:59 | 9 |
Можно использовать библиотеку pthread, если у тебя компилятор gcc, то скорее всего она туда уже встроена, инфа есть на русском в сети, а код твой последний потому не работает, что надо посмотреть прикреплённую тему к форуму.
А вообще задачу нахрапом не решить. И сдаётся мне, не решить ещё очень долго.
0
|
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 40
|
|
28.12.2012, 00:21 [ТС] | 10 |
Компилятор у меня Embarcadero RAD Studio 2010, также есть Borland C++Builder 6, желательно, с ними реализовать. А что за тему посмотреть надо, и действительно ли эта задача так сложна?
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|
28.12.2012, 01:37 | 11 |
С формошлёпством я мало знаком, не знаю, как там это всё реализовано, врать не буду. Это тебе надо не здесь, а в другом форуме спросить там, где изучают эту среду. Если скажут, что нужно многопоточное прграммирование, значит так тому и быть.
И хотя там и надо-то два потока всего создать там кода с гулькин нос, но всё равно это надо знать. Завтра попробую показать как это будет на WinApi Вкратце если- всейми эими кнопками управляет ОДИН поток. Если какая-то кнопка займёт его навсегда (бесконечный цикл), ты на остальные хоть занажимайся, толку не будет. Поэтому и нужны два потока как минимум, там тебе объяснили уже. Да с IDE тебе не повезло. Bilder это вообще по-моему не знаю что а первая тоже какой-о эксклюзив.
1
|
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 40
|
|
28.12.2012, 02:41 [ТС] | 12 |
А какую среду посоветуете?
Буду ждать примера. Добавлено через 8 минут Скачал, установил Dev C++ 4.9.9.2 пишет, что мол нет буста "2 C:\Dev-Cpp\main.cpp boost/thread/thread.hpp: No such file or directory."
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
||||||
28.12.2012, 05:36 | 13 | |||||
компилить с опциями:
-lpthread -mwindows короче создаётся окошко с двумя кнопками. Жмёшь на одну кнопку и начинается твой вечный цикл, в окошко пишется всякая херь. Как выйти из этого цикла? Уже было отвечено. Надо создать его в отдельном потоке и когда надо, поток убивать. Что у меня и делается. Цикл создаётся в отдельном потоке. Так, ну а когда жмёшь на вторую кнопку, созданный поток с циклом убивается, иначе никак. Ищи компилятор gcc, библиотеку pthread и вперёд. Если серьёзно настроен подскажу ресурсы.
Только имей ввиду что ТАК оконные приложения не пишутся, это просто чтобы знать что и как работает. Так пист это вчерашний день. Оконные приложения пишутся с помощью конструктора форм, где все кнопки не прописываешь вручную, а кидаешь на форму мышкой. Если серьёзно настроен на это, то советую обратиться к языку C#; тут вот моя тема: необходимо разобраться со всем этим благолепием, которое предоставляет студия MSVS Я лично отошёл от (С++сногоконструктора форм) и обратился к C# и по моему не ошибся. В конце концов никто не запрещает интерфейс реализовывать на С# (я так понял, это его сильная сторона; все вот эти кнопки), а функционал на C++ Добавлено через 51 секунду Ну а для этого дела Dev-Cpp самое то
1
|
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 40
|
||||||
04.01.2013, 23:41 [ТС] | 14 | |||||
Вот как решили эту задачу, пример простой программы:
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
|
04.01.2013, 23:45 | 15 |
элементарно в теле цикла проверяй кнопку
но ТС не сказал по до что пишет если Win32 то обрабатывать событие нажатие на нужные кнопки при старте запускай таймер ( обработка в таймере) при стопе останавливай таймер и обнуляй какую нибудь переменную при паузу просто останавливай таймер
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|
05.01.2013, 00:20 | 16 |
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
||||||
05.01.2013, 00:29 | 17 | |||||
какой такой вечный цикл?
я сказал запустил таймер, в таймере проходят итерации по одной например так
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|
05.01.2013, 01:37 | 18 |
Ты запустил таймер, например на 100 миллисекунд, через 100 миллисекунд он либо послал окну сообщение WM_TIMER, либо вызвал функцию обратного вызова, но пока эти 100 миллисекунд ИДУТ, ты никаких действий по отрисовке (тот самый вечный цикл ну или любые другие действия) делать не можешь; а в это время у тебя работает обыкновенный цикл обработки сообщений.
Фактически создавая таймер ты создаёшь один дополнительный поток, который через определённое время (100) миллисекунд совершает определённые действия- какие я сказал выше. Но в этом самом потоке ты ничё отрисовать не можешь и ничё полезного не сделаешь. Таймер он и есть таймер. Через определённые промежутки времени посылает сигнал создавшей его программе, только и всего. Ну или давай уж код с таймером, заценим; для простоты пусть будут две кнопки. Пуск таймера и стоп таймеру. Посмотрим чё ты отрисуешь во время его работы.
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
|
05.01.2013, 01:45 | 19 |
ты догадываешься как таймер в Windows работает?
на смотри правда я там не рисовал а музыку играл https://www.cyberforum.ru/post3838359.html если нужно конкретно рисование то скажи чего рисовать сварганим если время будет
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|
05.01.2013, 02:19 | 20 |
А чё тут догадываться? Есть справочники, взял прочёл, понял. Тут ничего не указывается ни на какую функцию обратного вызова. Во время которой могло бы происходить рисование или, например печать
http://www.vsokovikov.narod.ru... ttimer.htm Есть только указание на функцию обратного вызова, которая вызывается по окончании работы таймера. Это я прочёл по справке. Ты опять меня будешь спрашивать, догадываюсь ли я как работает таймер? Я прочёл и я не догадываюсь, я знаю. Такие ответы канают за отмазку вообще-то. Давай простое консольное приложение, которое вместо рисования что-нибудь печатает в консоли.
0
|
05.01.2013, 02:19 | |
05.01.2013, 02:19 | |
Помогаю со студенческими работами здесь
20
Нужно вместо кнопки старт/ стоп сделать смену цвета круга Как добавить кнопку Старт/Стоп TextureView video-старт/пауза как? Функция старт/стоп Процесс старт\стоп Таймаут, старт, стоп Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |