46 / 43 / 1
Регистрация: 02.07.2007
Сообщений: 2,446
|
|
1 | |
_tWinMain(): организовать запуск и работу таймера на фоне работы ReadDirectoryChangeW()07.08.2011, 21:27. Показов 1663. Ответов 3
Метки нет (Все метки)
Вот так таймер работает:
Код
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int cmdShow) { SetTimer(NULL, NULL, MY_TIME_PERIOD, (TIMERPROC)MyTimerProc); MessageCycle(): return 0; } VOID CALLBACK MyTimerProc(HWND hWnd, UINT uMsg, UINT_PTR idEvent, DWORD dwtime) { i++; } void MessageCycle() { MSG msg; BOOL bRet; while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0) { if (bRet == -1) { // handle the error anpossibly exit } else { TranslateMessage(&msg); DispatchMessage(&msg); } } } Код
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int cmdShow) { SetTimer(NULL, NULL, MY_TIME_PERIOD, (TIMERPROC)MyTimerProc); Cycle(); return 0; } void Cycle() { HANDLE hDir = CreateFile(_T(pathDir), // pointer to the file name FILE_LIST_DIRECTORY, // access (read/write) mode FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, // share mode NULL, // security descriptor OPEN_EXISTING, // how to create FILE_FLAG_BACKUP_SEMANTICS, // file attributes (FILE_FLAG_OVERLAPPED) NULL); // file with attributes to copy const DWORD dwNotificationFlags = FILE_NOTIFY_CHANGE_LAST_WRITE | FILE_NOTIFY_CHANGE_FILE_NAME; FILE_NOTIFY_INFORMATION Buffer[1024]; DWORD BytesReturned; VOID *pBuf = (BYTE*)&Buffer; while (ReadDirectoryChangesW(hDir, // handle to directory &Buffer, // read results buffer sizeof(Buffer), // length of buffer TRUE, // monitoring option dwNotificationFlags, &BytesReturned, // bytes returned NULL, // overlapped buffer NULL)) // completion routine { FILE_NOTIFY_INFORMATION* pInfo = (FILE_NOTIFY_INFORMATION*) pBuf; SelectAction(pInfo); } CloseHandle(hDir); } VOID CALLBACK MyTimerProc(HWND hWnd, UINT uMsg, UINT_PTR idEvent, DWORD dwtime) { i++; } VS 2008
0
|
07.08.2011, 21:27 | |
Ответы с готовыми решениями:
3
Как организовать запись звука в фоне? Запуск 1с в фоне Запуск webbrowser в фоне Запуск другого приложения в фоне |
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
07.08.2011, 21:33 | 2 |
В цикл разбора сообщений должно приходить WM_TIMER, если вы не ответите нулем на это сообщение, то оно обработано не будет
в первом случае сообщение обрабатывает DispatchMessage, который вызывает callback
0
|
46 / 43 / 1
Регистрация: 02.07.2007
Сообщений: 2,446
|
|
07.08.2011, 21:41 [ТС] | 3 |
>>В цикл разбора сообщений должно приходить WM_TIMER, если вы не ответите нулем на это сообщение
Как мне ответить на него нулём?
0
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
07.08.2011, 21:48 | 4 |
это немного не о том
вы даже сообщений не обрабатываете - GetMessage нигде не вызывается технология работы 1) создаете таймер - SetTimer 2) проходит интервал времени - система кладет сообщение WM_TIMER в очередь сообщений вашего окна/приложения 3) вы делаете GetMessage - достаете сообщение 4) дальше либо сами его обрабатываете, либо делаете Translate/Dispatch (система сама обрабатывает, вызывает) во-втором случае никакой обработки нет, ничего само вызываться не будет тут нужно сделать отдельный поток для обработки либо сообщений, либо ReadDirectoryChangesW
0
|
07.08.2011, 21:48 | |
07.08.2011, 21:48 | |
Помогаю со студенческими работами здесь
4
Запуск случайного видео на фоне Запуск Bash скрипта в фоне Запуск скрипта и его работа в фоне Помогите организовать прерывание таймера на Cortex-M3 Запуск программы в фоне (без консольного окна) Запуск таймера Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |