[РЕШЕНО] Работа таймеров в параллельном потоке |
Здравствуйте, гость ( Вход | Регистрация )
[РЕШЕНО] Работа таймеров в параллельном потоке |
AD |
30.11.2009, 12:48
Сообщение
#1
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
По каким-то причинам не работает таймер, который я хочу запустить в параллельном потоке.
В чем могут быть проблемы?
|
|
|
BRE |
30.11.2009, 12:51
Сообщение
#2
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
1. Обрати внимание, таймер создается в главном потоке!
2. В run() добавь exec(). |
|
|
AD |
30.11.2009, 15:31
Сообщение
#3
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
1. Обрати внимание, таймер создается в главном потоке! 2. В run() добавь exec(). Изменил. Не помогло. Code:
|
|
|
Litkevich Yuriy |
30.11.2009, 15:45
Сообщение
#4
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
AD, таймер так и остался в главном потоке.
Помести его в run(). П.С. А собственно будет ли влиять положение таймера, ведь ему не устанавливается родительский объект? |
|
|
AD |
30.11.2009, 15:49
Сообщение
#5
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
AD, таймер так и остался в главном потоке. Помести его в run(). Почему в главном? Не понимаю:
|
|
|
BRE |
30.11.2009, 16:11
Сообщение
#6
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
Почему в главном? Не понимаю: Потому что вызов конструктора объекта ContinueRotation выполняется в контексте главной нити (точнее той из которой он конструируется), а свой контекст нить получает, только при входе в метод run(). Либо перенеси создание таймера в run или попробуй делать ему moveToThread. П.С. А собственно будет ли влиять положение таймера, ведь ему не устанавливается родительский объект? Будет влиять на то, где будет крутиться таймер, точнее в чьем цикле обработки событий он будет проверяться и откуда будет испускаться сигнал. Сообщение отредактировал BRE - 30.11.2009, 16:05 |
|
|
Litkevich Yuriy |
30.11.2009, 16:25
Сообщение
#7
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
BRE, понял, ведь это следует из задачи
|
|
|
AD |
30.11.2009, 17:02
Сообщение
#8
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Мда... Руки у меня, что-ли, кривые.... Не выходит....
Вот полная версия run(). Все-равно, не попадает в reading(). |
|
|
BRE |
30.11.2009, 17:24
Сообщение
#9
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
Проверка и испускание сигнала от таймера происходит в цикле обработки событий, который запускается методом exec.
А у тебя к этому времени таймер уже остановлен. Сообщение отредактировал BRE - 30.11.2009, 17:24 |
|
|
AD |
30.11.2009, 17:27
Сообщение
#10
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Проверка и испускание сигнала от таймера происходит в цикле обработки событий, который запускается методом exec. А у тебя к этому времени таймер уже остановлен. Хорошо, спасибо. А я правильно понимаю, что это таймер заканчивает свое действие, как только программа выходит из функции run()? |
|
|
Текстовая версия | Сейчас: 15.1.2025, 22:43 |