Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
тестировал на 3 компьютерах:
1. AMD X2-4000 / XP Pro
2. Celeron 1600 / XP HE
3. Celeron 630 (ASUS eee PC 701) / XP HE
На первом минимальный квант около 2 мсек, на втором - около 10 мсек, на третьем - около 16 мсек. Переключение приоритета перед вызовом Sleep(1) ни на что не влияет.
Можете протестировать сами на своих машинах и своих ОС. Сейчас у меня нету 98/МЕ, но когда я проводил подобное тестирование около 10 лет назад, то получал минимальный квант около 55 мсек на машинах типа К5-133 и интел Р166ММХ
Исходник "измерительной" части:
#define COUNT 100
void CTestSleepDlg::OnOK()
{
int i, y1[COUNT], y2[COUNT];
LARGE_INTEGER freq, t1, t2, dt1, dt2;
::QueryPerformanceFrequency(&freq);
HANDLE h = GetCurrentThread();
for (i = 0; i < COUNT; i++)
{
//=======================================
::QueryPerformanceCounter(&t1);
Sleep(1);
::QueryPerformanceCounter(&t2);
//----------------------------------
dt1.QuadPart = t2.QuadPart - t1.QuadPart;
dt1.QuadPart *= 1000000;
dt1.QuadPart /= freq.QuadPart;
y1[i] = (int)dt1.QuadPart;
//=======================================
int prv = ::GetThreadPriority(h);
BOOL e = ::SetThreadPriority(h, THREAD_PRIORITY_TIME_CRITICAL);
::QueryPerformanceCounter(&t1);
Sleep(1);
::QueryPerformanceCounter(&t2);
::SetThreadPriority(h, prv);
//----------------------------------
dt2.QuadPart = t2.QuadPart - t1.QuadPart;
dt2.QuadPart *= 1000000;
dt2.QuadPart /= freq.QuadPart;
y2[i] = (int)dt2.QuadPart;
//----------------------------------
if (!e)
{
MessageBox("Priority set error");
return;
}
//=======================================
}
CString s, s1;
s1.Format("Freq = %d\r\n-------\r\n", (int)freq.QuadPart);
for (i = 0; i < COUNT; i++)
{
s.Format("%d %d\r\n", y1[i], y2[i]);
s1 += s;
}
m_Ed1.SetWindowText(s1);
}
Картинка: http://upload.caxapa.ru/TestSleep.zip
Ссылка: http://upload.caxapa.ru/sleep1.txt
Составить ответ | Вернуться на конференцию
Ответы
- На интеле с GV3 например QueryPerformanceCounter использовать некорректно, при уходе в Sleep ни...{+} - waw (07.01.2010, 18:13:20 82.220.52.50, 319 байт)
- кому не лень - запустите пожалуйста у себя, и выложите результаты - koyodza (07.01.2010, 14:39:20 93.73.215.120, пустое)
- Дык. Дискрет таймера планировщика задач 15 мс на десктопных виндах и 50 мс на серверных. - Oldring (07.01.2010, 14:27:22 109.188.219.104, пустое)
- ? - koyodza (07.01.2010, 14:30:47 93.73.215.120, пустое)
- Sleep() использует грубый таймер планировщика задач. - Oldring (07.01.2010, 14:32:39 109.188.219.104, пустое)
- да. Ну и что? Товарищ пытался доказать, что повышением приоритета он сможет что-то изменить - koyodza (07.01.2010, 14:36:7 93.73.215.120, пустое)
- Изменить можно вот этим. А повышением приоритера можно помешать другим приложениям помешать. - Oldring (07.01.2010, 14:41:3 109.188.219.104, пустое, ссылка)
- не уводите дискуссию в сторону - koyodza (07.01.2010, 14:43:45 93.73.215.120, пустое)
- Если я не ошибаюсь, требовалось 3 миллисекунды? Всё остальное - это уход в сторону. - Oldring (07.01.2010, 14:55:21 109.188.219.104, пустое)
- если не ошибаюсь, точно заявлено не было. Было типа "милисекундная задержка". Ну а если даже и 3 мсек - см. результаты тестирования - koyodza (07.01.2010, 15:01:31 93.73.215.120, 120 байт)
- 1) Где я утверждал про миллисекундную задержку? Ну-ка сюда цитатку или извинения. - Шунт_гороховый (07.01.2010, 16:28:44 93.80.42.236, 754 байт)
- добавление SetPriorityClass(..., REALTIME_PRIORITY_CLASS) ничего не изменило - koyodza (07.01.2010, 17:06:57 93.73.215.120, пустое)
- 1. не Вы, а автор изначального вопроса на стр.2589, и не утверждал, а спрашивал. 2. Предложите свой вариант. 3. Минимальный интервал от этого меньше не станет - koyodza (07.01.2010, 16:53:1 93.73.215.120, 627 байт)
- Ответ: - Шунт_гороховый (07.01.2010, 17:06:55 93.80.42.236, 620 байт)
- Я в этих столбцах чисел ничего не понимаю. - Oldring (07.01.2010, 15:06:39 109.188.219.104, 141 байт)