Мое время, затрачиваемое процессорным процессором, намного больше, чем хотелось бы (2 дисплея снимают до 80-90%). Я использую Qtimers, а некоторые из них имеют длину до 2 мс. В любой момент времени у меня может быть более 12 таймеров на дисплей - 2 мс, 2 мс, 2 мс, 250 мс, а остальные - от 200 мс до 500 мс. Было бы лучше, если бы я использовал потоки для некоторых или всех этих (особенно коротких)? Будет ли это иметь большое значение?QTimer vs отдельные потоки
ответ
Основная проблема времени будет заключаться в таймерах с высоким приоритетом. Во-первых, убедитесь, что вам действительно нужны эти каждые 2 мс, во-вторых, чтобы преодолеть некоторые из накладных расходов в классе QTimer, вы можете сгруппировать три таймаута 3 2 мс в один, и каждый раз, когда он отключается, просто выполняйте 3 раздела кода последовательно. Я не думаю, что нить разрешит проблему.
Ну, эта короткая скорость таймера основана на скорости передачи данных RS-232 со скоростью 19200 бод. Один таймер для чтения, один таймер для записи и один таймер для проверки буфера. Таймер 250 мс для тайм-аутов ответа (дисплей должен ответить в течение этого времени). Остальные таймеры обновляют отображаемый текст или некоторые другие операции. Я могу определенно объединить три таймера в одном, хотя. – Scott
Ах, неудивительно, что тогда. Извините, но ваш вопрос действительно выглядит так: «Нужна ли мне нормальная или отвертка Philips, чтобы вставить гвоздь?». Нет, вам нужен молоток. И в этом случае вам, вероятно, понадобится ввод/вывод с прерываниями. Поддерживает ли ваш Qt последовательный класс 'QIODevice :: readyRead'? – MSalters
2 мс швов подозревают меня. Люди читали и записывали в Serial Ports по 19200 бод в течение многих лет (например, на 486 аппаратных средствах) без перегрузки процессора. Возможно, ваш подход ошибочен.
Что вы используете для доступа к порту? Похоже, вы опросили их, если api поддерживает заблокированные чтения и пишет, что это будет гораздо лучший подход.
Простейшим было бы поместить чтение и запись в свой собственный поток и использовать блокирующие чтения в цикле, тогда ваш поток будет занят только тогда, когда есть данные для чтения, и вы его обрабатываете. Ваше приложение должно знать, когда ему нужно писать, поэтому правильный поток должен ждать переменной условия, когда данные доступны, это условие запускается, просыпая поток записи.
Возможно, с этим связаны более простые однопоточные подходы, так как я уверен, что первые приложения для чтения и записи на последовательных портах (например, x modem) не были многопоточными, но я их не знаю, но они должны быть документированы в api, который вы используете.
486? Я использовал его на 4.77 Mhz 8086. Это помогло, что мой компьютер имел 16550A UART с 16-байтовыми буферами; 19200 бод составляет около 2000 байт в секунду, что означает, что вам нужно очистить буфер только каждые 8 мс. И это прерывается, поэтому нет необходимости в тайных таймерах. – MSalters
Я не получил 16550A, пока не получил свой 486, мой 386SX имел 16550, такую же скорость, но без буфера. – iain
- 1. Многопоточность медленнее, чем отдельные потоки?
- 2. Отдельные логические приложения потоки и потоки сервлетов в WAR проекта
- 3. Framework vs. отдельные библиотеки
- 4. In_array vs отдельные значения?
- 5. Отдельные потоки видео в TS-файле
- 6. Используют ли обработчики регистрации отдельные потоки?
- 7. Совокупные отдельные потоки потоков в Spark
- 8. Как запустить отдельные потоки в pygtk
- 9. .NET DLL и потоки/отдельные экземпляры
- 10. Потоки приложений vs Сервисные темы
- 11. Неподвижные потоки, инициированные vs. Запланировано
- 12. Qtimer итерации
- 13. Hibernate cascade vs Отдельные вызовы
- 14. Shadow DOM vs Отдельные элементы
- 15. Java-потоки lazy vs fusion vs short-circuiting
- 16. PyQt4 QTimer не работает
- 17. QTimer неполный тип
- 18. QTimer с проблемами QDragEvent
- 19. Qtimer не работает
- 20. странное поведение QTimer
- 21. QTimer неверный выбор времени
- 22. Слот QTimer не набирается
- 23. QTimer - Повторяющийся таймер
- 24. QLocalSocket - QTimer и Lambda
- 25. QTimer не запускается
- 26. QTimer в многопоточном приложении
- 27. Какова основная работа qtimer?
- 28. QTimer SingleShot использовать активатор
- 29. QThread и QTimer
- 30. updateGL() с QTimer
Ваши литы заняты, подождите, с этими таймерами? Могут быть некоторые другие способы сохранить живые потоки. – bua
bua: Ну, я не использую потоки напрямую. Если Qt использует их за сценой, я не знаю об этом. У меня создалось впечатление, что он просто запускал один цикл в основном потоке и выполнял все расписания. – Scott
ваше впечатление правильное относительно основной нити. можно ли отменить некоторые таймеры, чтобы получить представление о том, какие из них занимают много времени? Я не думаю, что это количество таймеров или интервал, требующий много времени, скорее всего, это то, что вы делаете в них. –