一个线程开始时间的问题(谢谢)
有一个基于对话框的工程,对话框上有一个按钮,在按钮响应函数里开始
一个线程,如下:
UINT ThreadProc(LPVOID param)
{
CDialogFloat dlg;//在其他文件定义的对话框。
dlg.DoModal();
return 0;}
void CShiyan01Dlg::OnButton1()
{
AfxBeginThread(ThreadProc,NULL,THREAD_PRIORITY_ABOVE_NORMAL);
Sleep(3000);}
结果我发现必须要等到sleep三秒钟后,那个模式对话框才能出来,为什么呢?
问题点数:60、回复次数:6Top
1 楼zkoperater(zkoperater)回复于 2003-09-04 16:40:35 得分 0
谁帮帮 我呀
?谢了Top
2 楼lshadow(没车没房努力中。。。)回复于 2003-09-04 17:01:49 得分 3
换成非模式的试一试Top
3 楼wuchuncai(1234567)回复于 2003-09-04 17:34:00 得分 3
子线程响应慢Top
4 楼whoo(谁)回复于 2003-09-05 03:01:24 得分 20
sleep 会使线程休眠。休眠的线程不会进行任何处理,包括消息(对于界面线程来说,这又不是一件好事)。
但是创建window的时候又会有各种的消息发送、广播。如果一些消息被sleep暂停的话,创建的window只好等待。
Top
5 楼whoo(谁)回复于 2003-09-05 03:16:57 得分 20
跟踪DoModal()可以发现在
::EnableWindow(hWndParent, FALSE);
处发生了线程切换。
很显然DoModal需要hWndParent对WM_CANCELMODE消息作出反应,如果hWndParent不理不睬的话,DoModal就只好等下去了。Top
6 楼whoo(谁)回复于 2003-09-05 03:19:14 得分 14
其实即使不用Sleep也一样,因为Dialog必须等待该函数返回才能处理下一个消息。所以用这种方法创建的window只能在函数结束后才会出现。Top




