创建了一个动态连接库,在初始化的时候创建了两个线程,这两个线程原本是要接受用户发来的消息(使用PostThreadMessage函数)并进行处理的,问题出现了:1:当我向线程发消息的时候,如果此时很快的主线程结束了,那么,动态连接库中的线程根本得不到运行,系统马上转入动态链接库清理例程中运行,并且,似乎这个时候虽然那两个服务线程尚未结束(我采用的方法是向线程发送WM_QUIT消息通知他们结束自己),但是系统并不再为他们分配处理起了,问题是,我此时已经向他们发送了两个消息了,该怎么办才能让他们有充分得时间运行来处理消息呢?2:也是上面的那个动态连接库,在结束的时候,我的代码向线程发送WM_QUIT通知线程结束自己,然后使用WaitForSingleObject分别进行等待,超时则强制结束,可是,问题是,我在线程中加入了断点,试图跟踪对WM_QUIT的处理,可系统并没有进入线程内部就直接运行下面的代码了,也就是说,虽然消息被发送出去了,但是我的线程并没有对其进行处理,也就是说他们没有正常结束,可是GetExitCode却显示他们正常结束了,这又是怎么回事?而且WaitForSingleObject立即返回,并没有给时间让线程结束。3:还有在创建线程的时候,中断运行显示,在执行完_beginthreadex之后,系统仍然只有一个线程在运行,那么新创建的线程去哪里了?这个库没有使用MFC,哪位高人指点?
第二个问题: 你的线程是否建立了消息循环?记得线程中要建立消息循环,需要先PeekMessage再GetMessage
第二个问题: 不要使用_beginthreadex,而使用系统API CreateThread
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowmessages/wm_quit.asp当调用PostThreadMessage时,如果线程还没有消息队列,调用会失败。这时应当Sleep一段时间再重复调用PostThreadMessage,直到成功。2: 结束线程可以用Event,也可以用自定义消息的,在线程函数中使用WaitForSingleObject/WaitForMultipleObject/MsgWaitForMultipleObject来处理这个事件/消息。不能使用WM_QUIT来结束线程。3: 不明白
能说的清楚一点吗?