WaitForSingleObject以致程序界面不能刷新

WaitForSingleObject导致程序界面不能刷新
线程A和B使用事件进行同步,线程A等到消息,触发事件,线程B继续往下执行,在线程B 使用WaitForSingleObject等待事件的时候,程序界面刷新缓慢,甚至不能刷新,这正常吗???
------最佳解决方案--------------------
BOOL bWait = WaitForSingleObject(m_hEvent,1000);
    if(bWait == WaitTimeout )
    {
         ResetEvent(m_hEvent);
         return 0;
    }

WaitTimeout 就是超时 事件没信号你ResetEvent干嘛呢? WaitForSingleObject和ResetEvent之间如果切换到A检测到消息SetEvent了 这下又被你Reset回去了...
------其他解决方案--------------------
肯定不正常,看看你代码怎么写的
------其他解决方案--------------------
线程A
{
    检测到消息;
     SetEvent(m_hEvent);
}
线程B
{
    .......
    BOOL bWait = WaitForSingleObject(m_hEvent,1000);
    if(bWait == WaitTimeout )
    {
         ResetEvent(m_hEvent);
         return 0;
    }
    .......
}
事件是在两个线程外部创建的,大致就是这样
------其他解决方案--------------------
程序界面刷新缓慢,甚至不能刷新是指哪方面?从上面代码中看不出什么来,只要主线程中没有阻塞式的代码,应该就不会影响主界面的刷新,还有,你子经程中有没有死循环什么的?
------其他解决方案--------------------
你的主线程中怎么写了,写了些什么?
------其他解决方案--------------------
程序是基于对话框的程序,在对话框界面操作,然后创建这两个线程,在线程B执行到WaitForSingleObject句时,如果线程A一直没有消息,也就是没有触发事件,这时候对对话框进行操作,就会发现界面操作没反应,或者反应很慢,线程B是一个死循环,主线程应该是对话框线程,这个线程是系统自己建的,应该没错
------其他解决方案--------------------
只能说明你程序写得有问题,
界面线程一般不要 Wait,工作线程做完以后,一个 PostMessage 上去,就行了,
------其他解决方案--------------------
引用:
只能说明你程序写得有问题,
界面线程一般不要 Wait,工作线程做完以后,一个 PostMessage 上去,就行了,

界面线程没有Wait,线程A和B属于工作线程
------其他解决方案--------------------
工作线程中不要直接操作界面,通过PostMessage出去,交给主线程处理;看看你CPU占用多少,如果界面刷新慢,一盘是CPU太高,看看工作线程中的死循环中,适当Sleep一下
------其他解决方案--------------------
引用:
工作线程中不要直接操作界面,通过PostMessage出去,交给主线程处理;看看你CPU占用多少,如果界面刷新慢,一盘是CPU太高,看看工作线程中的死循环中,适当Sleep一下

CPU使用大概在70%左右,工作线程中的死循环适当Sleep一下什么意思?
------其他解决方案--------------------
就是在while内部sleep(1)释放时间片
------其他解决方案--------------------
就是
线程中
while(1)
{
Sleep(10);加一个Sleep,释放CPU控制权,让其他线程占用CPU
}
------其他解决方案--------------------
加了延时试过了,还是不行,A线程会收不到消息,而且资源紧缺,调一次真不容易,哎、、、
------其他解决方案--------------------
问题找到了,是没有走到刷新图形代码、、、、晕、、、谢谢大家了哈!