我有一个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()不是阻塞的吗?高手帮忙,谢谢!!!

解决方案 »

  1.   

    用Lock而不是Event,
    线程,信号不要滥用
      

  2.   

    再者,你这里使用Event最好设置成自动
    invoke CreateEvent,NULL,FALSE,TRUE,NULL
      

  3.   

    嗯,谢谢提醒问题已解决。
    我最后是用临界区来处理的还有,用EVENT也可以。就如gellf所说的,要设为自动,手动的情况下,一进行SetEvent()后会释放所有的等待线程,自动的情况下,只会释放一个等待线程。原因就在此。