опубликован 13-05-2001 00:26 MSK
Есть такая буква! (c) ;-)))))Тебе тогда надо (правда, через задний проход, но сам так делаю, вроде работает)
сделать HardwareTimer (в MSDN написано, что на некоторых тачках отсутствует. Не встречал таких;-)))) ).
вот кодик:
здесь - функция отдельного потока.
UINT ThreadProc(LPVOID pParam)
{
CCriticalSection criticalsection; //для корректности
CSingleLock singlelock(&criticalsection);
LARGE_INTEGER PerformanceCounterLast;
LARGE_INTEGER PerformanceCounterCurrent;
LARGE_INTEGER PerformanceFrequency;
LARGE_INTEGER PerformanceDelta;
float SecondsPassed=0;
PerformanceCounterLast.QuadPart=0;
PerformanceCounterCurrent.QuadPart=0;
PerformanceFrequency.QuadPart=0;
PerformanceDelta.QuadPart=0;
QueryPerformanceFrequency(&PerformanceFrequency);
QueryPerformanceCounter(&PerformanceCounterCurrent);
while (/* Чего-нибудь ;-)*/ )
{
QueryPerformanceCounter(&PerformanceCounterCurrent);
PerformanceDelta.QuadPart=PerformanceCounterCurrent.QuadPart-
PerformanceCounterLast.QuadPart;
if ((PerformanceDelta.QuadPart)>50)
{ //Если ~0, то просто время еще не подошло (ну, например,
//если поток только запущен
SecondsPassed=( (float)PerformanceDelta.QuadPart)/
( (float)PerformanceFrequency.QuadPart);
if (SecondsPassed>=/*ТУТ-КАКОЕ-ТО-ЧИСЛО*/)
{
PerformanceCounterLast=PerformanceCounterCurrent;
singlelock.Lock();
//Тут твоя функция
singlelock.Unlock();
}
}
Sleep(0); //отдаем оставшееся время другому потоку
}
return 0;
}