wglMessagePump.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "wglMessagePump.h"
00019
00020 #include <eq/base/debug.h>
00021 #include <eq/base/log.h>
00022
00023 using namespace std;
00024
00025 namespace eq
00026 {
00027 WGLMessagePump::WGLMessagePump()
00028 : _win32ThreadID( 0 )
00029 {
00030 }
00031
00032 void WGLMessagePump::postWakeup()
00033 {
00034 if( !_win32ThreadID )
00035 {
00036 EQWARN << "Receiver thread not waiting?" << endl;
00037 return;
00038 }
00039
00040 PostThreadMessage( _win32ThreadID, WM_APP, 0, 0 );
00041 }
00042
00043 void WGLMessagePump::_initReceiverQueue()
00044 {
00045 if( !_win32ThreadID )
00046 {
00047 MSG msg;
00048 PeekMessage( &msg, 0, WM_USER, WM_USER, PM_NOREMOVE );
00049 _win32ThreadID = GetCurrentThreadId();
00050 }
00051 EQASSERTINFO( _win32ThreadID == GetCurrentThreadId(),
00052 "WGLMessagePump::pop() called from two different threads" );
00053 }
00054
00055 void WGLMessagePump::dispatchOne()
00056 {
00057 _initReceiverQueue();
00058
00059 MSG msg;
00060 if( GetMessage( &msg, 0, 0, 0 ))
00061 {
00062 TranslateMessage( &msg );
00063 DispatchMessage( &msg );
00064 }
00065 }
00066
00067 void WGLMessagePump::dispatchAll()
00068 {
00069 _initReceiverQueue();
00070
00071 MSG msg;
00072 while( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ))
00073 {
00074 TranslateMessage( &msg );
00075 DispatchMessage( &msg );
00076 }
00077 }
00078 }