线程互斥等待超时, 找不到原因解决方案

线程互斥等待超时, 找不到原因 - C++ Builder / Windows SDK/API
DLL有一个线程,若干导出函数. 线程处理一块内存, 导出函数等待线程处理后输出这块内存.问题是有时候出现超时情况.
简化后下面这样:
 
C/C++ code
 g_hMutex = CreateMutex(NULL, FALSE, NULL);

//DLL导出的函数
int__stdcall DllFun(BYTE *pBuf)
{
        //有时候超时,有时候正常, WHY???
    if (WaitForSingleObject(g_hMutex, 3000) == WAIT_OBJECT_0)
        {
         //memcpy(pBuf, g_Buf, dwSize);
        while (ReleaseMutex(g_hMutex));
        return 1;   
        }
    return 0;
}
//线程函数
unsigned __stdcall ThreadFun(void *parm)
{
    while(!g_bTermiate)
    {
                    if (WaitForSingleObject(g_hMutex, 3000) != WAIT_OBJECT_0)
                    {
              Sleep(2);
                    continue;
                    };
        //对g_Buf进行操作, 不超过0.5秒
        //.......
        while (ReleaseMutex(g_hMutex));
    }
    return 0;
}



------解决方案--------------------
(WaitForSingleObject等待对方在指定时间内没有释放资源,当然会超时了
------解决方案--------------------
你是怎么得到的这个结论呢??会不会就是因为数据处理超时了呢?你试试这个时间再长点,看超时的情况有没有减少。
探讨
每次处理不会超0.5秒, 等待3秒, 不应该出现超时情况

------解决方案--------------------
探讨

有2个地方我在怀疑, 1是不是跟CreateMutex有名字和无名字有关;2 不知道Mutex系统如何实现的,DllFun是在有窗口的消息循环中调用的,而ThreadFun中没有消息循环.

------解决方案--------------------
探讨

ReleaseMutex(g_hMutex);//释放成功时,返回true,你的是死循环来的.
//在g_hMutex有效时,不断释放干什么?除非g_hMutex无效..
//把WaitforXXX和ReleaseXXX使用看清楚点.

------解决方案--------------------
探讨

引用:

ReleaseMutex(g_hMutex);//释放成功时,返回true,你的是死循环来的.
//在g_hMutex有效时,不断释放干什么?除非g_hMutex无效..
//把WaitforXXX和ReleaseXXX使用看清楚点.


呵呵,你自己没弄懂,别闹笑话了。