非窗口线程建立消息队列时需要一个过程,你必须等此过程完成了才能进行,
别的线程要不断的SendMessage给它直到返回成功值,这样才能判断消息队列建立起来了,不然在建立之前的消息都会被丢掉的,注意---需要一个过程
具体情况可以看msdn的postthreadmessage函数的解释
别的线程要不断的SendMessage给它直到返回成功值,这样才能判断消息队列建立起来了,不然在建立之前的消息都会被丢掉的,注意---需要一个过程
具体情况可以看msdn的postthreadmessage函数的解释
解决方案 »
- 谁有VC网络编程的学习视频
- CListCtrl创建成功后第一个执行的函数是哪个函数?
- debug下程序在调用com函数时 出现 KERNEL32.DLL 0xE06D7363: Microsoft C++ Exception.
- 请问:如何在CEditView里设置每行显示的字符数
- 怎么在打开的对话框中获得视图指针?
- 我想让我的程序在启动时设置注册表,是不是在CXXXApp::InitInstance()里填写代码?
- VC访问Access的问题
- [转贴]求助:VC到EVC后的错误
- 如何做一个属性页的程序(即界面是属性页)?
- wry.dll的格式,怎么创建临时文件!
- 请教:可否通过ODBC API读写SQL Server的image字段?
- Listview的两个问题
如果是这样的话,可以充分利用另外一个消息参数, lParam, 为不同工作线程设立不同的参数值。
我怀疑问题所在是不是在调用PostThreadMessage以后,形成了一个Message Queue,当调用PeekMessage函数以后,
该Message Queue就失效了,即使里面还有没有调用的Message,所以当在两个地方同时调用PostThreadMessage,
发送两个消息到目标线程的Message Queue,调用一个PeekMessage时,得到了其中一个Message,但是整个Message Queue就
失效了,所以另一个message它就收不到了,不过如果Message Queue一次只能够处理一个消息,那么它存在有什么意义
呢,另外好像GUI或Window的Message Queue好像不会有这种问题的,可以发送好多消息到Message Queue,然后再
逐一进行处理。唉,PostThreadMessage怎么就不行呢,它的Message Queue结构我也看不到,所以就是无从下手。FT!!!!
if (!PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
//处理程序....
if(!GetMessage(&msg, NULL, 0, 0))
//出错处理
if(msg.message == PWM_OPERATEDATABASE)
////下面不用写了吧
}
PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)
改为
PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)
试试看!
因为用PM_REMOVE调用,就会将此消息从队列中删除,
下面的等待函数当然就无法再从消息队列中获取此消息。
你的方法我也试过了,好像还是不行,PM_REMOVE与PM_NOREMOVE的区别可能是把已经读取过的消息删除掉,但是没有读取过的应该不会有影响吧。
to west_wood(拧发条鸟)
不知道你是如何实现的,可否讲具体一点,谢谢。