0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 40
|
|
1 | |
Как сделать "Старт", "Пауза", Стоп"?26.12.2012, 11:11. Показов 15848. Ответов 71
Метки нет (Все метки)
Доброго времени суток,
как сделать так, чтобы при нажатии на кнопку начиналось цикличное действие (рисование например) и продолжалось бы пока не будет нажата другая кнопка. Грубо говоря, как сделать "Старт", "Пауза", Стоп".
0
|
26.12.2012, 11:11 | |
Ответы с готовыми решениями:
71
C++ Threads или как запрограммировать кнопку Старт и Стоп нужно сделать кнопки старт и пауза для движущихся фигур В билдеровском MediaPlayer-е кнопка стоп работает как пауза? Одна форма, кнопки старт и стоп. Как остановить? Через интерфейсе (GUI) сделать кнопку стоп, старт, пауза |
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|
07.01.2013, 01:38 | 61 |
там пьяный что ли? Меня же цитируешь где я говорю о РАЗНЫХ окнах и тут же возражаешь так, будто я говорю об одном окне.
Нет, представь себе. Я говорю о случае, когда, каждый поток владеет собственным окном, следовательно, оно- неразделяемый ресурс. И я даже знаю что ты сейчас скажешь, ты скажешь: скучно с тобой становится. ++++++++++++++++++++++++++++++++++++++++++++++++++ это типа крест на мне... ++++++++++++++++++++++++++++++++++++++++++++++++++ Ну и что? Мало ли что там было изначально? Я ставлю ДРУГОЙ вопрос- вернее ты его ставишь, а именно- потоки в билдер реализованы круче, нежели в pthread, а когда я предлагаю пободаться- в кусты сразу. Консоль вполне подойдёт. Нет, конечно можно попытаться меня запутать, так тот чел- отправить не знаю куда где лежит какой-то там проект, можно глубокомысленно изречь: Ещё вариант: можно продолжать твердить про четыре строчки кода, как мантру. Не хошь не надо. Оставайся со своими четырьмя строчками кода. повторюсь: ну раз неинтересно, и сиди со своими четырьмя строчками кода.
0
|
07.01.2013, 02:09 | 62 |
Бодаются бараны, я не таков ...
Скучно писать : Есть претензии укажи - ошибки в моем коде, либо напиши свой код как альтернативу с теми же возможностями (или более...) Это твой вывод ... для меня это не вопрос ... для данной задачи (для данного компилятора,операционной системы) TThread лучше подходит... Но никто не запрещает юзать что угодно и как угодно при этом - но будет много буков, как я уже сказал. Да собственно спросите ТС какой из предложенных кодов ему больше подходит ... и на этом думаю можно тему закрывать (если нет конечно вопросов по сути) Другая тема ...
0
|
0 / 0 / 0
Регистрация: 22.10.2012
Сообщений: 40
|
|
07.01.2013, 15:04 [ТС] | 63 |
Вопросы есть, один из способов - это с помощью потока рисовать средствами Апи на канве, всё хорошо, НО тогда встает вопрос: как изменять цвет и толщину пера?
Второй реализованный мною способ - это с помощью таймера рисовать на канве средствами Vcl, здесь же слишком большое время исполнения, т.к одной прорисовки предшествует 1000 шагов расчетов (при шаге таймера 1 миллисекунда - это минимум 1 секунда). Вы предлагали также другие способы, но реализовать их не удалось, что подскажете, что выбрать?
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|
07.01.2013, 18:14 | 64 |
Ну вот, то, о чём я и говорил. Задержка в 1 секунду не допускается, но она есть. Вот и таймер.
Но и мой способ не подойдёт по этой же самой причине. Если его использовать, тогда управляющий поток должен передать управление рисующему потоку, который точно также будет чего-то расчитывать в течении1-ой секунды, а, поскольку он в это время будет владеть окном, та же задержка в управлении и выйдет. Только реализация ещё труднее. Что же делать? Нужен симбиоз решений. Пусть у тебя рисует всё в таймере- у то есть через 100 миллисекунд к примеру. Это нормально. Но все расчёты пуст делаются в ДРУГОМ потоке. Ну то есть как-то так: ---в потоке A нажал старт-> создался параллельный поток B (чисто для расчётов, он окно не занимает) ---Поток A отрисовывает чё надо и посылает сигнал об этом потоку B ---В потоке B делается расчёт и посылается об этом сигнал потоку A; поток B приостанавливает деятельность ---Поток A отрисовывает чё надо и посылает сигнал об этом потоку B И так сколько нам надо раз. Можно сделать, чтобы поток B сделал, к примеру 10 расчётов по 1-ой секунде каждый после чего самоубился. Тогда вся работа займёт примерно 1- секунд- то же самое, что и в твоём варианте с той лишь разницей, что в эти 10 секунд окно тормозить не будет . Можно просто напросто реализовать убиение потока по нажатию кнопки стоп. Я тебе сразу говорил с кандачка эту задачу не решить. Не по теме: А в билдере, как я понял, надо только подумать и синхронизацию прописывать не надо, всё само пропишется. И напоследок ты спросишь- а где тут таймер? Как видишь, обошлись без него. Ведь для чего он нам нужен был? Чтобы циклично выполнялись какие-то действия (перерисовка). Но тут таймером может с успехом служить поток B- всякий раз по окончании расчётов он посылает сигнал об этом потоку A; так что не будем плодить лишние сущности. Щас изобразим. Сразу говорю- кнопки пауза не будет, кроме того. Данные потоку B передаваться не будут. Передача динамически формирующихся данных- это отдельная тема. Вместо этого будет например семафор какой-нибудь (тоже вид данных своего рода), то есть так: поток B расчитал- сбросил флаг поток A отрисовал- установил флаг Считай что флаг это и есть данные
0
|
07.01.2013, 19:10 | 65 |
Ну я уже говорил что это опасно -раз, неудобно - два,в этом нет необходимости так как решение предусмотрено VCL - три.
(о рисование можно найти в любом справочнике по WinApi ( работа GDI ) ) Собственно в коде который я предлагал для потоков можно увидеть как я выставляю толщину пера с помощью VCL Ну говорил об этом расчетов много - таймер не подойдет, решать надо в потоке.... Более того в VCL таймер работает адекватно с интервалом ~300 мс ( меньше выставить нельзя- не сработает ). Если это слишком надо то нужно реализовывать таймер на основе WinApi ( что собственно несложно и пример этого есть в одной из книг Архангельского, которые указывал раньше) Что именно ? Что не удалось ? Я же выкладывал готовый проект... Моё мнение тоже TThread c синхронизацией ... Да и переформулируй задание по конкретнее, а то благодаря некоторым уже и непонятно что именно нужно тебе .... Добавлено через 3 минуты Это идиотизм, пЫрдонте... Да да... тебе не решить...
1
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
||||||
19.01.2013, 16:38 | 66 | |||||
мели, Емеля.
-lpthread -lgdi32
0
|
0 / 0 / 0
Регистрация: 04.03.2014
Сообщений: 25
|
|
27.11.2016, 21:37 | 67 |
Но если не использовать сторонних библиотек, то как можно реализовать старт, паузу и выход из консольной программы?
0
|
0 / 0 / 0
Регистрация: 04.03.2014
Сообщений: 25
|
|
28.11.2016, 23:34 | 69 |
Ну есть же чисто С++ - ные библиотеки как заголовочный файл iostream включён в стандартную библиотеку C++. А вот Boost это как не стандартная библиотека.
Вопрос не по теме, кто-то может знает, что такое log state-переходов и как это оформить в формате .txt
0
|
0 / 0 / 0
Регистрация: 04.03.2014
Сообщений: 25
|
|
29.11.2016, 00:01 | 71 |
Я с многопоточностью ещё не знакомилась, не могу сказать)
0
|
29.11.2016, 00:07 | 72 |
А читать умеете вообще? - Читайте тему с начала...
А затем задайте себе вопрос "о чем это я?"
0
|
29.11.2016, 00:07 | |
29.11.2016, 00:07 | |
Помогаю со студенческими работами здесь
72
Нужно вместо кнопки старт/ стоп сделать смену цвета круга Как добавить кнопку Старт/Стоп TextureView video-старт/пауза как? Функция старт/стоп Процесс старт\стоп Таймаут, старт, стоп Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |