非窗口线程建立消息队列时需要一个过程,你必须等此过程完成了才能进行,
别的线程要不断的SendMessage给它直到返回成功值,这样才能判断消息队列建立起来了,不然在建立之前的消息都会被丢掉的,注意---需要一个过程
具体情况可以看msdn的postthreadmessage函数的解释

解决方案 »

  1.   

    看了MSDN,好像有这么一说:In the thread to which the message will be posted, call PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE) to force the system to create the message queue. 意思就是利用PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE) 就可以强制建立一个消息队列,我在DBThreadFunc线程函数的一开始久通过这么一个过程建立了消息队列,因为我利用执行一个PostThreadMessage时候就可以的,如果没有建立消息队列的话,PostThreadMessage就会返回错误,但结果是正确的。说明该消息队列已经建立了,但是我就不知道为什么第二个消息他就不能够接受?我想这个消息应该是存在的,如何可以查看这个消息队列啊,有函数吗?
      

  2.   

    实在不行用sendmessage跟踪进去看看
      

  3.   

    你发送消息的线程是不是都是工作线程?是不是 Windows 不能区分来自不同工作线程的同一个消息?
    如果是这样的话,可以充分利用另外一个消息参数, lParam, 为不同工作线程设立不同的参数值。
      

  4.   


    我怀疑问题所在是不是在调用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!!!!
      

  5.   

    简单:
    if (!PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))  
      {
      //处理程序....
      if(!GetMessage(&msg, NULL, 0, 0))
            //出错处理
        if(msg.message == PWM_OPERATEDATABASE)
        ////下面不用写了吧
    }
      

  6.   

    你把
    PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)
    改为
    PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)
    试试看!
    因为用PM_REMOVE调用,就会将此消息从队列中删除,
    下面的等待函数当然就无法再从消息队列中获取此消息。
      

  7.   

    to  west_wood(拧发条鸟) 我早就试过各种GetMessage与PeekMessage的方法了,结果都是一样的,而且我这个结构是从MSDN上的COMMCODE.C这个程序里面看来的应该是不会错的,我现在就是不知道PeekMessage到底是怎么读取消息队列的,以及消息队列是怎么存取的???to  seasol(衣风) 
    你的方法我也试过了,好像还是不行,PM_REMOVE与PM_NOREMOVE的区别可能是把已经读取过的消息删除掉,但是没有读取过的应该不会有影响吧。
      

  8.   

    to  west_wood(拧发条鸟) 你是用一个UI线程还是什么,我是直接通过_beginthreadex直接来产生的,只有一个线程函数体,你是不是用CWinThread类派生出来的类进行处理的?
      

  9.   


      to  west_wood(拧发条鸟)  
     
    不知道你是如何实现的,可否讲具体一点,谢谢。
     
      

  10.   

    我做过很多的多线程,线程消息处理,没有你说的问题啊!把源码给我,我帮你看看。[email protected]
      

  11.   

    呵呵,不知 halcyon(halcyon)君的EMAIL另外,我的QQ是699321,各位有何意见可以QQ上见
      

  12.   

    niewq(强强) :信已发出,请查收