UI线程中定义事件m_Event
InitInstance函数中添加代码
CMyDlg* pDlg=new CMyDlg;
pDlg->Create(IDD_DIALOG);
pDlg->ShowWindow(SW_HIDE);
m_pMainWnd=pDlg;
....
return之前使用SetEvent(m_Event);主线程中的OnInitDialog函数中,在AfxBeginThread之后
OpenEvent(....);
WaitSingleObject(m_Event,INFINITE);
结果发现程序停在了InitInstance中的
pDlg->Create(IDD_DIALOG);处。
不知道是怎么回事!!!
本人是菜鸟,希望各位大侠不吝指教
InitInstance函数中添加代码
CMyDlg* pDlg=new CMyDlg;
pDlg->Create(IDD_DIALOG);
pDlg->ShowWindow(SW_HIDE);
m_pMainWnd=pDlg;
....
return之前使用SetEvent(m_Event);主线程中的OnInitDialog函数中,在AfxBeginThread之后
OpenEvent(....);
WaitSingleObject(m_Event,INFINITE);
结果发现程序停在了InitInstance中的
pDlg->Create(IDD_DIALOG);处。
不知道是怎么回事!!!
本人是菜鸟,希望各位大侠不吝指教
解决方案 »
- 画刷会造成资源泄露???
- 按钮风格的问题!
- 万分紧急 !!!!急急急!!!VC先调用API函数进行简繁体的转换问题
- 帮忙找错,谢谢
- 如何做文档格式的转换(TXT2PDF等)?
- 调查:多少人知道它——"科大联想杯"全国大学生软件设计大赛
- ATL Active COM 是什么概念,好象很时髦,可我不懂,能否帮小弟解释一下,或提供点资料看看,谢谢了
- 谁有给数据库添加大量测试数据的工具?要求能够设定字段之间的关系。http://expert.csdn.net/Expert/topic/1471/1471094.xml?temp=.85360
- 请问如何将窗口显示的内容保存为内存位图,以及如果在内存位图中做图,谢谢了
- 问个多个工具栏的问题
- Error Envoking ATL Object Component?
- 线条不在控件上显示了
将第一贴中的SetEvent,WaitSingleObject......机制完全除去!主对话框类中定义一个事件
CEvent IsForePanelResting(FALSE, TRUE, "isforepanelresting",NULL);
//这里的forepanel指的就是UI线程在InitInstance()中启动的对话框:CMyDlg* pDlg=new CMyDlg;
pDlg->Create(IDD_DIALOG);
pDlg->ShowWindow(SW_HIDE);
m_pMainWnd=pDlg;在UI线程的.cpp文件中声明
extern CEvent IsForePanelResting;
这个事件标志的是UI线程对话框处于空闲状态。
当UI线程开始处理业务的时候会将IsForePanelResting置为无信号,处理业务完毕之后再将IsForePanelResting置为有信号!主对话框(BackPanel)中能够检测按钮按下产生的数字信号量。这些数字信号量的作用就是告知BackPanel应该切换到某个UI线程的对话框。而切换之前必须保证有关当前对话框的业务操作必须完成,就是说当前对话框处于空闲状态:
ForePanelResting。我现在的做法是检测到某个键按下之后,使用WaitForSingleObject等待IsForePanelResting出现信号。
然而让我不解的是每当按下按钮,程序进入处理函数后会出现不正常的现象:
如果UI线程没有改变IsForePanelResting的状态,那么可以在各个界面之间自由切换。如果UI线程改变了IsForePanelResting的状态为FALSE(无信号),那么主线程就会死在WaitForSingleObject(......)的地方!
我怀疑是不是需要给IsForePanelResting加上个互斥保护?