我有一个win32窗口程序,是基于多线程的,它会建立十多个线程,每个线程都会调用一个子模态对话框。
程序要求同一时刻只能有一个子对话框出现,处理完当前子对话框,关闭它后才允许打开另外线程的子对话框。我是用EVENT来处理的,代码如下:--------------------主程序中--------------------
hVcEvent dd ?
WM_CREATE:
invoke CreateEvent,NULL,TRUE,TRUE,NULL
mov hVcEvent,eax
...
WM_CLOSE:
invoke CloseHandle,hVcEvent
...
-------------------线程函数中-------------------
invoke WaitForSingleObject,hVcEvent,0ffffffffh
invoke ResetEvent,hVcEvent
invoke DialogBoxParam,hInstance,3008,hDlg,xxxProc,edi
invoke SetEvent,hVcEvent
...
-----------------------------------------------------我想问一下,为什么没有效果??? 程序运行后同一时刻还是会有多个子对话框产生,这是什么原因??? DialogBoxParam()不是阻塞的吗?高手帮忙,谢谢!!!
程序要求同一时刻只能有一个子对话框出现,处理完当前子对话框,关闭它后才允许打开另外线程的子对话框。我是用EVENT来处理的,代码如下:--------------------主程序中--------------------
hVcEvent dd ?
WM_CREATE:
invoke CreateEvent,NULL,TRUE,TRUE,NULL
mov hVcEvent,eax
...
WM_CLOSE:
invoke CloseHandle,hVcEvent
...
-------------------线程函数中-------------------
invoke WaitForSingleObject,hVcEvent,0ffffffffh
invoke ResetEvent,hVcEvent
invoke DialogBoxParam,hInstance,3008,hDlg,xxxProc,edi
invoke SetEvent,hVcEvent
...
-----------------------------------------------------我想问一下,为什么没有效果??? 程序运行后同一时刻还是会有多个子对话框产生,这是什么原因??? DialogBoxParam()不是阻塞的吗?高手帮忙,谢谢!!!
解决方案 »
- win32 创建一个按钮以后怎么能响应点击呢?
- 请问如何使的Edit Control的垂直滚动条自动滚动使之保持在最下
- CColorDialog 类中的 SetCurrentColor 如何使用?
- 请大家看我写的一个网络拆包的函数,看看其中的思路是否有问题
- 急求大侠指点批处理问题!!!再三感谢~~~
- 如何编写带独立介面的COM程序并与之交互? 详细见内.
- 一个非常容易的问题
- InitializeCriticalSectionAndSpinCount如何使用?
- 关于MFC中使用vector
- VC打开AUTOCAD图形
- 一个没有资源的CDialog如何Create
- 请问使用DirectX能回放ogg格式的声音文件么?
线程,信号不要滥用
invoke CreateEvent,NULL,FALSE,TRUE,NULL
我最后是用临界区来处理的还有,用EVENT也可以。就如gellf所说的,要设为自动,手动的情况下,一进行SetEvent()后会释放所有的等待线程,自动的情况下,只会释放一个等待线程。原因就在此。