我正在编写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
有什么想法吗?
谢谢..