Witam.
Piszę program, który steruje pewnym urządzeniem. Konkretne komendy pochodzą z biblioteki dll.
Po wywołaniu konkretnej komendy muszę mieć pewność że wykonała się ona cała. Informacje zwrotne dostaje za pośrednictwem funkcji:
GatewayCallback(DWORD dwState, ULONG ulChannel, DWORD dwResult, LRESULT lResult);
{
//(...)
switch ( dwState )
{
case STATE_LOGIN:
if ( dwResult == 1 )
{
Logged = TRUE;
}
break;
//(...)
}
Czekanie na Logged = true dzieje się tak:
#define WM_GATEWAYMESSAGE (WM_USER+0x3333) // z dokumentacji
MSG msg;
Komenda_z_dll(..);
do
{
if (PeekMessage( &msg, NULL, WM_GATEWAYMESSAGE, WM_GATEWAYMESSAGE, PM_NOREMOVE) )
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}while (Logged == FALSE )
//..dalsza część programu
Stosując obsługe Message'ów, a nie jakiejś zwykłej pętli opóźniającej mam pewność, że nie blokuję wykonania komendy.
Mam pytanie czy wygląda to w porzadku bo niestety program zachowuje się tak jakby wpadał w pętle nieskonczoną (..zawias). Zmienna Logged jest globalna i na pewno wpada w TRUE (sprawdzałem innymi trywialnymi metodami).
Czy są jakieś obostrzenia w Builderze C++ (ver. 6) co do stosowania msg?