ReleaseMutex的问题

时间:2011-04-09 01:16:39

标签: c++ winapi mutex

我正在编写API,我遇到了Mutex的问题。 主线程,在某些时候,确实:

void  sendMessage (char* g_lpTxBuffer)
{
   for ( int i = 0; ( i < 2) && ( FALSE == g_bAckRecvd) ; i++ )
   {
     sendToSerial( g_lpTxBuffer );
     g_iRecvMessage = YES;
     g_iState       = WAITING_FOR_ACK;
     Sleep(50);
   }
   WaitForSingleObject(g_hMutex, INFINITE);

我有一个子线程,谁做了:

DWORD WINAPI ThreadProc(void* lpv)              
{  
 g_hMutex  = OpenMutex( MUTEX_ALL_ACCESS, FALSE, "MUTEX_RECEIVE" );

while (TRUE)
{   
   g_bNAKflag = FALSE;
    if ( YES == g_iRecvMessage )
    {                                                                                
     WaitForSingleObject(g_hMutex, INFINITE);                        
     receiveMessage();                                                           
    }

    if ( MESSAGE_READY == g_iState )
    {
       processMessage();        // interpret the message

       if ( FALSE == g_bNAKflag )
       {
          g_iState = IDLE;
       }
    ReleaseMutex(g_hMutex);
    }
} // while

return 0;

}

我发现,如果我将ReleaseMutex()放在上面指出的位置,主线程永远不会从WaitForSingleObject()函数返回。但是,如果我把它放在

  

if(YES == g_iRecvMessage)&gt;

(这是不好的,因为多次调用receiveMessage,从串口接收每字节字节)它工作,WaitForSingleObject运行良好..

我用

创建互斥锁
  

g_hMutex = CreateMutex(NULL,FALSE,“MUTEX_RECEIVE”);

我检查过,ReleaseMutex()返回true

有什么想法吗?

谢谢..

0 个答案:

没有答案