Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
с помощью "системного тика", который для 98 составляет 55 мсек, а для ХР (да и вроде всех на платформе NT) что-то около 15 мсек. Это значит, что дискретность задержки составляет время этого самого тика. Кроме того, время может быть растянуто при необходимости.
Вывод: Sleep() годится только для формирования некритичных ко времени задержек. Например, в пользовательском интерфейсе. Но никак не аппаратнозависимых.
Для точного учёта времени используйте QueryPerformanceCounter, QueryPerformanceFrequency. Учтите, что на разных процессорах период QueryPerformanceFrequency разный: например, на нескольких проверенных мною компах на базе AMD частота была одинаковой (3,58... МГц), а на нескольких проверенных Р4 (и одно и двухядерных) соответствовала частоте ядра. Поэтому всегда вызывайте в начале QueryPerformanceFrequency, а для расчетов пользуйтесь LARGE_INTEGER (__int64), поскольку например 3ГГц уже не лезет в __int32
В MSDN описание функции Sleep имеет такой вид: VOID Sleep(DWORD dwMilliseconds // sleep time in milliseconds
);
Составить ответ | Вернуться на конференцию.
Ответы