| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [QT4] Использование QTimer в QThread |
| Автор: Mal Hack 14.3.2008, 20:33 |
| Доброе время суток. Задача - использование QTimer'a в QThread, вариант sleep в самом потоке не желателен... Сейчас работает так, но алгоритмически это - ошибка в решаемой задачи... Почитал я кое-что... Сделал вывод, что надо поток создавать exec'ом, но вот где ему тогда прописывать то, что он должен делтать по таймеру - вопрос... Я так понимаю, могу обойтись и встроенными в QThread (от QObject): startTimer(int), killTimer... Спасибо. |
| Автор: JackYF 14.3.2008, 21:16 | ||
Чего-то я не понял вопроса и проблемы...
|
| Автор: Mal Hack 14.3.2008, 22:56 | ||
Суть проблемы. Есть QThread, внутри него:
Но... Мне надо выпонлять операции в цикле не с промежутком в 10 мс, а с тактом в 10 мс.. Т.е. Грубо говоря, чтобы 10 мс отсчитывались не от времени последней операции, а как в таймере.. |
| Автор: bsa 15.3.2008, 00:00 |
| не уверен, что тебе ОС такую периодичность сможет гарантировать |
| Автор: JackYF 15.3.2008, 00:56 | ||
ну, 10 миллисекунд, думаю, сможет Mal Hack, ну это...
Оно, нет? У меня стойкое ощущение, что что-то я в вопросе упустил... |
| Автор: Mal Hack 15.3.2008, 01:35 | ||||||
Задача - опрашивать устройство с частотой 100 Гц, делать это надо в потоке ибо не дай бог что отвалить, основная нить должна жить и с ней надо работать дальше ;)
Если бы все было так просто ;) Имею при запуске:
|
| Автор: bsa 15.3.2008, 01:53 |
| Mal Hack, вообще-то таймеры созданы в основном для работы с интерфейсом (я их так понимаю). Именно поэтому их нельзя запускать из отдельного потока. А потом, что значит "отвалится"? Сделай проверку, чтобы не повисало. В любом случае, проку от проги с повисшим потоком - 0, так как его надо убивать, а там ресурсы могут не подчиститься... В общем, плохая идея. Думаю, тебе придется завязаться на API предоставляемый OS. |
| Автор: nickless 15.3.2008, 02:58 | ||||||||||||
Ну почему? Можно, если event loop запустить
ЗЫ Насчет new без delete, parent надо не забывать передавать, а то вот это не удалится
Посмотри http://doc.trolltech.com/4.2/qobject.html#deleteLater |
| Автор: Mal Hack 15.3.2008, 19:15 |
| nickless, если честно, не фига не понял, что вы хотели сказать этим постом... Пробовал сделать по аналогии - результат как и раньше... метод, который должен выполняться по таймеру лежит в обьекте потока. |
| Автор: nickless 15.3.2008, 22:32 | ||
Ну это был как-бы пример использования QTimer в QThread... Код + ошибки в студию. |
| Автор: Mal Hack 15.3.2008, 23:42 | ||
Сделал так:
|
| Автор: nickless 16.3.2008, 00:37 |
| Вот это когда вызывается? Какие ошибки? Добавлено через 1 минуту и 46 секунд Надо чтобы вызывалось после run() |
| Автор: Mal Hack 16.3.2008, 13:34 |
| nickless, ошибок нет... Вызываю после run... Все работает |