在界面上点击按钮,按钮里面WaitForSingleObject(m_mutex,time);
子线程里面也有WaitForSingleObject(m_mutex,time)。但我发现,如果子线程进入用拥有m_mutex后再点击按钮,这时候按钮会执行WaitForSingleObject(m_mutex,time),但问题是,这时候子线程被挂起,所以m_mutex被子线程拥有并没有释放,所有time不管设多大,按钮里面的WaitForSingleObject(m_mutex,time)总是失败。
为啥?子线程的优先级低于主线程导致的?

解决方案 »

  1.   

    线程的优先级越高,挣得CPU的机会就越高,windows是多线程竞争资源得操作系统,不能保证某个线程一定会获得cpu。
    多个线程waitforsingobject同一个互斥量,这本身就是有歧义的,不能保证某个线程在某一时刻一定会获得CPUT,可以创建多个Mutex去实现线程调度。
    创建手动事件或者手动信号量可以保证多个等待对象waitforsingobject都获得内核对象得触发事件,实现线程乱转。