精简的程序是这样:主对话框的BTN点击之后创建了一个辅线程,辅线程里创建一个对话框和两个BTN,然后辅助线程
while(1)
{
 if(bshow)
      dlg.show();
 else
     dlg.hide();
     sleep(1000);
}
运行之后,主对话框会死。而且CPU占用率0%。暂停程序,程序停在辅线程的sleep里。大概问题是出在辅助线程不能操作UI。UI是非线程安全的。有什么书详细描述UI非线程安全的吗?介绍本看看。

解决方案 »

  1.   

    嗯,俺也这么认为,俺线程里面Wait或Sleep的地方很多,从来没憋住过主线程。您这精简的程序,不能说明问题所在。
      

  2.   

    void
    doevents( void )
    {
    MSG msg; if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )
    {
    TranslateMessage( &msg );
    DispatchMessage( &msg );
    }
    }void
    delay( DWORD times )
    {
    DWORD dwStart = GetTickCount();
    DWORD dwEnd = dwStart;
    do
    {
    doevents();
    dwEnd = GetTickCount();
    } while( ( dwEnd - dwStart )  <=  times );
    }
    用用俺常用的delay( 1000 );试试
      

  3.   

    那就别把UI 放到工作线程中去.或者使用UI 线程来操作对话框