Другие языки программирования и технологии

можно ли в Winapi создать несколько таймеров, если программа работает без окна?

в функции SetTimer если аргумент hwnd - NULL, то указывать идентификатор таймеру бессмысленно (то есть нельзя создать 2 таймера в проге без окна), может кто нибудь знает как создать несколько таймеров, помогите пож.
может лучше нормальный таймер использовать?

double countsPerSecond = 0.0;
__int64 CounterStart = 0;

void StartTimer(){
LARGE_INTEGER frequencyCount;
QueryPerformanceFrequency(&frequencyCount);
countsPerSecond = double(frequencyCount.QuadPart);
QueryPerformanceCounter(&frequencyCount);
CounterStart = frequencyCount.QuadPart;
}

float GetTime(){
LARGE_INTEGER currentTime;
QueryPerformanceCounter(&currentTime);
return double(currentTime.QuadPart - CounterStart) / countsPerSecond;
}

/////////// применение
StartTimer();
while(true)
if (GetTime() > 1.f)//если 1 секунда достигнута
{
//что-то делать
StartTimer();//сброс таймера
}

с использованием include chrono

auto t1 = chrono::system_clock::now();
unsigned int calculating_simulation { 0 };
while ( true ) {
auto t2 = chrono::system_clock::now();
if( chrono::duration_cast< chrono::milliseconds >( t2 - t1 ).count() > 250 ){
cout << '.';
++calculating_simulation;
t1 = chrono::system_clock::now();
}
if( calculating_simulation > 9 ){
cout << endl;
break;
}
}

//=========== или так
inline _int64 rdtsc_time( void ){
_asm{
rdtsc
}
}
double get_CPU_speed( void ){
auto a = rdtsc_time();
Sleep( 1000 );
return static_cast((rdtsc_time() - a));
}
////////////
double cpuspeed = get_CPU_speed();
cout << "CPUSPEED: " << cpuspeed << "Hz\n";
_int64 _t1 = rdtsc_time();
while( true ){
//какое то вычисление
if( что-то ) break;
}
_int64 _t2 = rdtsc_time();
cout << "Затраченное время: " << (_t2 - _t1)/cpuspeed << '\n';
Дмитрий Новиков
Дмитрий Новиков
30 074
Лучший ответ
Азамат Есенгалиев Кода много, а микросекундная точность далеко не всегда требуется
В MSDN не русским по белому написано:
If the function succeeds and the hWnd parameter is NULL, the return value is an integer identifying the new timer. An application can pass this value to the KillTimer function to destroy the timer.

Т. е. с нулевым hwnd функцией SetTimer возвращается уникальный идентификатор для каждого таймера, никаких ограничений на количество нет.
> в функции SetTimer если аргумент hwnd - NULL, то указывать идентификатор таймеру бессмысленно (то есть нельзя создать 2 таймера в проге без окна)
Прочитал описание функции SetTimer (https://msdn.microsoft.com/en-us/library/ms644906(v=vs.85).aspx). Никакого запрета не нашёл.
Виктор Джан
Виктор Джан
2 948

Похожие вопросы