Добрый всем день (вечер, ночь). Пишу прогу с гуем на Qt 4, в которой активно используется com-порт. В функциях нижнего уровня работы с com-портом используются задержки, построенные на основе Sleep( n ). Проблема заключается в том, что на некоторых машинах программа работает ну очень медленно. Но... если запустить в фоне, например, Windows Media Player, все начинает работать как надо, т.е. на приемлимой скорости. Пробовал вообще выключать собственно работу с com-портом из функций (оставляя при этом задержки и прочий код) - ситуация не изменилась. Либо все дело в Sleep, либо в Qt-шном коде, либо в чем-то еще )). Может кто чего подскажет? P.S. Пробовал собрать тестовую программку, которая просто тупо в цикле выводит разную хрень с задержками - все работает на ура. Неужели все дело в Qt?
Может это конечно совпадение, но я ревершу прогу, которая активно юзает QT, так вот часто при отладке, при срабатывании бряка, все гуи виснет(в смысле вообще все) пока не переключишься на другой рабочий стол ctrl-alt-del + регулярно вообще виснет вся граф система + клавиатура + мышь, а винамп при этом играет.. add: когда ничего не отлаживается такого нет
Не совсем понял фразу... Классы нижнего уровня (в частности, и класс работы с com-портом) у меня написаны на С++ без примесей Qt, поэтому не хотелось бы использовать там Qt-шные функции (если это имелось в виду в предыдущем посте).
В предыдущем посте видимо имелось в виду, что вызов мультимедийной функ-и timeBeginPeriod(1) уменьшает интервал системного счетчика с обычных 10-15 мс до 1мс и соотв-но Sleep, GetTickCount и т.п.отсчитывают интервалы более точно. Возможно влияние винампа и связано с установкой timeBeginPeriod, попробуй сам ее вызвать и посмотри, что будет
Sol_Ksacap, leo Благодарю, парни, - действительно заработало с этой функцией как надо. Буду разбираться подробнее )...
Но все же непонятно как другое приложение (тот же Media Player) повлияло на мое, ведь как гласит MSDN "The timeBeginPeriod function sets the minimum timer resolution for an application or device driver."
bers Таймер - общий ресурс, поэтому кто-бы его ни перенастроил влияет на всё и на драйвера и на все юзермодные приложения.
Ну вообще как-то странно, что программа влияет на работу других исполняющихся приложений... По хорошему точность, устанавливаемая данной функцией, должна все же быть "привязанной" только к текущей программе.
This function affects a global Windows setting. Windows uses the lowest value (that is, highest resolution) requested by any process. Setting a higher resolution can improve the accuracy of time-out intervals in wait functions. However, it can also reduce overall system performance, because the thread scheduler switches tasks more often. High resolutions can also prevent the CPU power management system from entering power-saving modes. Setting a higher resolution does not improve the accuracy of the high-resolution performance counter.