------Solutions------
tosunbo()
不好意思,我没有用过::MessageBox(NULL,....),不过我试过TRACE(),肯定是可以的。
------Solutions------
如果你在主界面中的函数中用WaitForSingleObject,肯定会阻塞,因为你的主界面不能接收消息了,最好在工作线程中用这个函数你检查一下你的程式是否在主界面中调用。
------Solutions------
TOalanwang_(alan)兄:
问题是我在用户界面线程中调用该函数同样会使主线程阻塞.
不知是何故?
------Solutions------
lovelypengpeng(鹏鹏)
你直接用VC调试,断点停到setEvent之前,主线程断点停到wait之前,然后记录主线程的hEvent,主线程单步运行一步,将会阻塞!然后再看一下子线成的hEvent是否与刚才主线程的一样,也单步运行一步,看看setEvent的返回值是否正确,再将子线程挂起,主线程恢复,看看wait返回了没有。
通常这个与子线程是否是UI线程无关。
你先安上面的办法调试一下吧
------Solutions------
你不说主副关系谁知道怎么回事啊,有可能是主和副同时调用了WAITFORSINGLEEVENT(),而谁都是无限等待有没有SLEEP辅助。
最好有代码,否则无法给你检查出问题出在那里的。
------Solutions------
不阻塞用户界面线程才怪呢。
俩个的event都不一样,不是同一个对象。
赫赫。
主线程是肯定不会阻塞的
------Solutions------
两个event是一样的。
主线程向用户界面线程发消息时,将eventhandle带在参数中了,OnTest里面的wParam就应该是主线程等待的hEvent。
这种做法是可以的。我以前也经常这样,主线程负责启动程序,用子线程创建窗口,没问题的。
------Solutions------
赫赫...不好意思。:alanwang_(alan)
我是说punpuny()的程序
另:
所谓的用户界面线程,就是说他的线程函数是一个
类似winmain的函数
有一个while(peekmessage())循环而已,当然最好得有窗口(窗口得是本线程中createwindow的,如此而已),
得到的消息,hwnd==null的,被称为线程消息。
一句话,和工作者线程一个样。
------Solutions------
//主线程为:
classCTestThreadApp:publicCWinApp
{
public:
HANDLEm_hEvent;
BOOLWaitMyEvent(HANDLEhObject);
//...
};
#include"MyUIThread.h"
BOOLCTestThreadApp::InitInstance()
{
m_hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
ResetEvent(m_hEvent);
CMyUIThread*pThread=(CMyUIThread*)AfxBeginThread(RUNTIME_CLASS(CMyUIThread));
pThread->PostThreadMessage(WM_TEST,0,(LPARAM)m_hEvent);
//WaitForSingleObject(m_hEvent,INFINITE);改为
WaitMyEvent(m_hEvent);
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23463-5.html
马云先生
但我想要表情
那么要饭的可以几个合娶呀
再也不敢更新了