|
|
|
Supreme Being
      
участник
Last Login: 06.07.2008 10:37
Сообщ.: 236,
Visits: 1 734
|
|
У функции UINT_PTR SetTimer( HWND hWnd, UINT_PTR nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc ); первым параметром передается HWND окна, в котором обрабатывается сообщение ON_WM_TIMER. А если на момент создания таймера окна нет, то как и где нужно обрабатывать сообщения таймера?
Делаю так:
class CMainApp : public CWinApp { public: CMainApp( ); ~CMainApp( ); virtual BOOL InitInstance( ); BOOL StartTmr( ); BOOL KillTmr( ); protected: DECLARE_MESSAGE_MAP( ); UINT_PTR m_nTimer; };
BEGIN_MESSAGE_MAP( CMainApp, CWinApp ) END_MESSAGE_MAP( );CMainApp::CMainApp( ) {StartTmr( );}; BOOL CMainApp::StartTmr( ){ m_nTimer = SetTimer( NULL, 1, 250, 0 ); return TRUE; };BOOL CMainApp::KillTmr( ){ KillTimer( NULL, m_nTimer ); return TRUE; };
BOOL CMainApp::InitInstance( ) { CMainWnd dlg; m_pMainWnd = &dlg; dlg.DoModal(); return TRUE; };
CMainApp::~CMainApp( ){};
CMainApp theApp;
Visual Studio 2005. Проект MFC. Спасибо.
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
| Функция SetTimer работает через оконные сообщения поэтому не имея окна (и цикла обработки сообщений) воспользоваться ей не удастся. Выход в использовании мультимедиа таймеров или функции CreateWaitableTimer/SetWaitableTimer.
|
|
|
|
|
Supreme Being
      
участник
Last Login: 30.09.2008 17:18
Сообщ.: 121,
Visits: 2 334
|
|
Ну не имея окна все же можно извратиться с помощью SetTimer, а вот не обрабатывая очередь сообщений с ним уже действительно не получится.#include <stdio.h> #include <conio.h> #include <windows.h>UINT TId; VOID CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime) { putc('>',stdout); if(kbhit()) { KillTimer(NULL,TId); PostQuitMessage(0); } } int main() { TId = SetTimer(NULL,1,100,(TIMERPROC)TimerProc); MSG msg; while(GetMessage(&msg,0,0,0)) DispatchMessage(&msg); return msg.wParam; }
|
|
|
|
|
Supreme Being
      
участник
Last Login: 06.07.2008 10:37
Сообщ.: 236,
Visits: 1 734
|
|
| Все ясно, большое спасибо!!
|
|
|
|