Thread/Timer Problem



  • Hallo zusammen,
    habe gerade ein merkwürdiges Problem.
    Meine Anwendung erzeugt einen neuen Thread. Dieser Thread erstellt einen Timer. Jedoch wird die angegebene Timer-Prozedur nicht durchlaufen. Erstelle ich den Timer im Hauptthread, dann funktioniert alles wunderbar.

    Hier mal etwas Code:

    #include <windows.h>
    
    VOID CALLBACK TimerProc( HWND hWnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime );
    DWORD WINAPI ThreadProc( LPVOID pParam );
    
    int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
      LPSTR lpCmdLine, int nCmdShow )
    {
      MSG msg;
      HANDLE hThread;
      DWORD dwThreadId;
    
      hThread = CreateThread( NULL, 0, ThreadProc, NULL, 0, &dwThreadId );
    
      while ( GetMessage( &msg, NULL, 0, 0 ) )
      {
        TranslateMessage( &msg );
        DispatchMessage( &msg );
      };
    };
    
    VOID CALLBACK TimerProc( HWND hWnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime )
    {
      int i = 0;
    
      while ( i < 100 )
      {
        i++;
      };
    };
    
    DWORD WINAPI ThreadProc( LPVOID pParam )
    {
      SetTimer( NULL, NULL, 100, TimerProc );
    
      while ( 1 )
      {
        Sleep( 10 );
      };
    
      ExitThread( 0 );
      return 0;
    };
    


  • Jeder thread hat seine eigene message queue. Die timer message langed also in der message queue von thread 2 nicht von thread 1, was bedeutet es passiert gar nix damit da thread 2 keine message loop zum abarbeiten hat



  • Hi CMatt, habe ich auch gerade gefunden. Eigendlich einleutend oder 🙂 Danke.


Anmelden zum Antworten