C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  Update World C++: Сборник GPL QT исходников
  Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Дебетовая карта Home Credit [CPS] RU

 Консольный таймер / Разное. / Дата, время, таймеры

Консольный таймер

Следующий пример консольной программы устанавливает таймер при помощи SetTimer а затем в цикле принимает от него сообщения. В цикле происходит получение и обработка сообщений WM_TIMER, вызывая при этом процедуру таймера.

#define STRICT 1 
#include <windows.h>
#include <iostream.h>

VOID CALLBACK TimerProc(HWND hWnd, UINT nMsg, UINT nIDEvent, DWORD dwTime) {
cout << "Time: " << dwTime << '\n';
cout.flush();
}

int main(int argc, char *argv[], char *envp[]) {
	int Counter=0;
	MSG Msg;
UINT TimerId = SetTimer(NULL, 0, 500, &TimerProc);
cout << "TimerId: " << TimerId << '\n';
if (!TimerId)
	return 16;
while (GetMessage(&Msg, NULL, 0, 0)) {
	++Counter;
	if (Msg.message == WM_TIMER)
		cout << "Counter: " << Counter << "; timer message\n";
	else
		cout << "Counter: " << Counter << "; message: " << Msg.message << '\n';
	DispatchMessage(&Msg);
	}
KillTimer(NULL, TimerId);
return 0;
}

Эта программа была написана после прочтения статьи MS KB Q102482 - INFO: SetTimer() не должна использоваться в консольных приложениях, так как консольные приложения не поддерживают разделения потоков. Статья Under The Hood (March 1997) содержит набор примеров консольных программ, похожих на вышеприведённый пример, которые используют SetTimer() без разделения потоков.

 

 






Дебетовая карта Home Credit [CPS] RU