@Dexter
286 / 146 / 16
Регистрация: 13.10.2009
Сообщений: 164
|
25.02.2011, 13:32
|
|
таймер в консольном приложении win32
Как-то я делал когда-то но сейчас не вспоминается (может я и ошибаюсь), там не так просто как в оконных приложениях.
вопрос один: реально ли в консольном приложении сделать так, чтобы программа ожидала некоторое количество времени некую команду (например, getch()) и выполняла некий алгоритм, если дождётся либо выполняла другой алгоритм (ничего не делала), если эта самая "некая команда" не получена?
Вот без таймера, а с событием:
C++ | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| #include <windows.h>
#include <stdio.h>
#include <conio.h>
HANDLE hTimer = NULL;
DWORD WINAPI WaitingFor(LPVOID lParam)//функция окончание которой мы ждем, в данном случае getch()
{
getch();
SetEvent(hTimer);
return 1;
}
int wmain()
{
HANDLE MyThread;
hTimer=CreateEvent(NULL, TRUE, FALSE, L"timer" );//делаем евент
MyThread=CreateThread(NULL,0,WaitingFor,NULL,0,0);//запускаем в потоке нужную нам функцию
DWORD res=WaitForSingleObject(hTimer, 10000);//ждем события в данном случае 10сек
if (res == WAIT_OBJECT_0)//если событие было взведено, тоесть getch() получен
{
wprintf(L"WaitForSingleObject() - timer was signaled...\n");//чето делаем
}
else
if (res == WAIT_TIMEOUT)//если ушли по таймауту - убиваем поток и чето делаем
{
wprintf(L"WaitForSingleObject() - time out...\n");
CloseHandle(MyThread);
}
else//ну и на случай ошибки
wprintf(L"WaitForSingleObject() failed, error %d\n", GetLastError());
return 0;
} |
|
2
|