Здравствуйте! Иногда часть схемы нужно запускать в потоке чтоб не подвисала программа. И вопрос можно ли из потока вызывать старт таймера, учитывая что таймер это поток основного приложения? Так же не будет ли ошибок, если запускать из таймера новый поток? Или лучше все таймеры заменить на элементы потока?
Этот топик читают: Гость
Ответов: 704
Рейтинг: 7
|
|||
карма: 0 |
|
Ответов: 2059
Рейтинг: 132
|
|||
Neo писал(а): Или лучше все таймеры заменить на элементы потока?Лучше все таймеры заменить на элементы потока. Таймер - тоже поток.
Таймеров не должно быть, если мы конечно, чего-то не измеряем, или не делаем анимацию, где таймер является свойством скорости объекта(меша). Всё должно происходить по условию, или событию. Если появляются таймеры, то чего-то не додумано. Смотри в сторону архитектуры программы. |
|||
карма: 6 |
|
Разработчик
Ответов: 26113
Рейтинг: 2126
|
|||
flint2 писал(а): Если появляются таймеры, то чего-то не додумано.Это не совсем корректное утверждение. Иногда таймер применяется для перевода событий из одной очереди в другую, те события во второй очереди появятся только после полного завершения первой. |
|||
карма: 22 |
|
Ответов: 704
Рейтинг: 7
|
|||
flint2 писал(а): Если появляются таймеры, то чего-то не додумано.Философское утверждение. Но если клиент пытается подключиться к серверу, который еще не готов? Не ставить же в цикл событие повторной попытки по ошибке подключения, здесь таймер на какое-то время пригодился бы. Или нет? |
|||
карма: 0 |
|
Ответов: 1926
Рейтинг: 172
|
|||
Поток иссякает до выполнения итерации таймера:
А вот таймер может запускать новый поток в цикле (лишь бы не накладывались):
Но поток и сам имеет свой таймер:
|
|||
карма: 9 |
|
Ответов: 2059
Рейтинг: 132
|
|||
Иногда таймер применяется для перевода событий из одной очереди в другую
Согласен, но перевод событий из одной очереди в другую не есть хорошо. Философское утверждение.
Не отнюдь, вернее отнюдь нет. Посмотри, как игрушки делаются... К примеру, сейчас отладчик делаю для Lua скриптов - потоков немерянно, так всё-таки оказалось правильно не кидать данные из потока в поток, а колбеки делать. Все задачи... Всё будет хорошо! |
|||
карма: 6 |
|
Разработчик
Ответов: 26113
Рейтинг: 2126
|
|||
flint2 писал(а): Согласен, но перевод событий из одной очереди в другую не есть хорошо. Вся ОС так построена, а тут утверждается обратное. У нас тут не RealTime. Попробуй длинный цикл повесить на onCreate формы, а потом почеши репу, а где же сама форма? А будешь ты ее ждать до ослиной пасхи, пока цикл не кончится. Или попробуй удалить мультик из самого себя без перевода событий в другую очередь. Прямой аналог такого действия это функция ОС -- PostMessage, когда сообщение ставится в очередь, и оно не будет выполнено, пока не закончится та очередь сообщений, из которой функция была вызвана. Или такая функция системы тоже flint2 писал(а): не есть хорошоРедактировалось 1 раз(а), последний 2018-11-24 17:41:58 |
|||
карма: 22 |
|
Ответов: 704
Рейтинг: 7
|
|||
3042, отдельное спасибо за примеры! По первому случаю не ожидал такого. Помню кто-то из форумчан подсказал так не запускать вроде, но давно и я тогда не понял почему. А по второму - главное чтоб не накладывалось что именно?
--- Добавлено в 2018-11-25 00:05:47 nesco, про очереди событий особенно не понятно когда доходит до работы с внешними устройствами. Они отдают данные асинхронно в потоках, накапливаю в массиве и достаю на отработку оттуда. То есть создаю искусственную очередь - так работает более стабильно. А если потоки обрабатывать сходу по мере поступления - бывают пропуски. Потому на системную очередь не надеюсь с потоками, горожу свою очередь с мьютексами. Редактировалось 1 раз(а), последний 2018-11-25 00:05:47 |
|||
карма: 0 |
|
Разработчик
Ответов: 26113
Рейтинг: 2126
|
|||
Neo писал(а): Они отдают данные асинхронно в потоках, накапливаю в массиве и достаю на отработку оттуда.Так и надо делать, но надо следить, чтобы массив не переполнялся. Neo писал(а): Потому на системную очередь не надеюсь с потоками, горожу свою очередь с мьютексами.А это я вообще не понял на кой... А почему не использовать синхронное событие потока? |
|||
карма: 22 |
|
Ответов: 704
Рейтинг: 7
|
|||
nesco писал(а): А это я вообще не понял на кой... А почему не использовать синхронное событие потока? А это Редактировалось 2 раз(а), последний 2018-11-25 20:35:12 |
|||
карма: 0 |
|
Ответов: 1926
Рейтинг: 172
|
|||
Neo писал(а): главное чтоб не накладывалось что именно?Чтобы новая итерация таймера не произошла до того, как закончится выполнение потока от первой итерации. Смотри свойства этих компонентов - они могут блокировать повторный запуск, пока не закончился первый. |
|||
карма: 9 |
|
Ответов: 704
Рейтинг: 7
|
|||
Потоки случайно не засыпают при блокировке рабочего стола? странности с ними наблюдаю. с таймерами увереннее отрабатывало выход пользователя из виндовс при работающей программе и повторном входе.
|
|||
карма: 0 |
|
12