Как установить таймер в консольном приложении Win32?

Возможный дубликат:
Могу ли я использовать SetTimer () API в консольном приложении c ++

Я ищу, чтобы создать таймер в C ++, в консольном приложении Win32. Я Google и найти большинство результатов для SetTimer (), но в качестве примера используется для управления окном или других.

Мне нужен мой таймер, чтобы начать отсчет, сразу после запуска таймера я вызываю функцию, а после окончания таймера я вызываю другую функцию. Я буду использовать потоки.

Я новичок в C ++, так что это может быть сделано с помощью функции SetTimer?

Благодарю .

1

Решение

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

Вы могли бы наслаждаться Объекты Waitable Timers вместо. Они разработаны специально для использования с потоками в качестве объектов синхронизации.

Пример использования:

#define _WIN32_WINNT 0x0500

#include <windows.h>
#include <stdio.h>

int main()
{
HANDLE hTimer = NULL;
LARGE_INTEGER liDueTime;

liDueTime.QuadPart=-100000000;

// Create a waitable timer.
hTimer = CreateWaitableTimer(NULL, TRUE, "WaitableTimer");
if (NULL == hTimer)
{
printf("CreateWaitableTimer failed (%d)\n", GetLastError());
return 1;
}

printf("Waiting for 10 seconds...\n");

// Set a timer to wait for 10 seconds.
if (!SetWaitableTimer(hTimer, &liDueTime, 0, NULL, NULL, 0))
{
printf("SetWaitableTimer failed (%d)\n", GetLastError());
return 2;
}

// Wait for the timer.
if (WaitForSingleObject(hTimer, INFINITE) != WAIT_OBJECT_0)
printf("WaitForSingleObject failed (%d)\n", GetLastError());
else printf("Timer was signaled.\n");

return 0;
}

Смотрите также хорошую статью о таймерах Windows: http://www.codeproject.com/Articles/1236/Timers-Tutorial

8

Другие решения

Других решений пока нет …