QTimer против отдельных потоков - PullRequest
0 голосов
/ 30 октября 2009

Моя программа действительно потребляет процессорное время намного больше, чем хотелось бы (2 дисплея снимает его до 80-90%). Я использую Qtimers, и некоторые из них имеют длину всего 2 мс. В любой момент времени у меня может быть более 12 таймеров на дисплей - 2 мс, 2 мс, 2 мс, 250 мс, остальные значения варьируются от 200 мс до 500 мс. Было бы лучше, если бы я использовал темы для некоторых или всех из них (особенно короткие)? Будет ли это иметь большое значение?

Ответы [ 2 ]

2 голосов
/ 30 октября 2009

Основная проблема времени будет приходить на таймеры с высоким приоритетом. Во-первых, убедитесь, что вам действительно нужны эти каждые 2 мсек, во-вторых, чтобы преодолеть некоторые накладные расходы в классе QTimer, вы можете сгруппировать свои тайм-ауты по 3 2 мсек в один, и каждый раз, когда он срабатывает, просто последовательно выполнять 3 секции кода. Я не думаю, что многопоточность решит проблему, хотя.

1 голос
/ 30 октября 2009

Мне кажется, что швы 2 мс. Люди годами читали и писали в последовательные порты со скоростью 19200 бод (например, на 486 аппаратных средствах), не перегружая процессор. Возможно, ваш подход неверен.

Какой API вы используете для доступа к порту? Похоже, вы опрашиваете их, если API поддерживает заблокированные операции чтения и записи, это был бы гораздо лучший подход.

В таком случае проще всего поместить чтение и запись в их собственный поток и использовать блокировку чтения в цикле, тогда ваш поток будет занят только тогда, когда есть данные для чтения и вы обрабатываете их. Ваше приложение должно знать, когда ему нужно выполнить запись, поэтому правильный поток должен ожидать переменную условия, когда данные доступны, это условие запускается, вызывая поток записи.

Вероятно, существуют более простые однопоточные подходы к этому, поскольку я уверен, что первые приложения для чтения и записи на последовательных портах (например, модем x) не были многопоточными, но я их не знаю, но они должны быть задокументированы в API, который вы используете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...