是这样的,我写了一个关于TCP消息接受和发送的类,专门用于收发各种TCP消息包。
我把接收到的包和发送的包缓冲在一个链表里面。
现在的问题是,当我发现有包收到的时候,如何通知其他的类包已经收到这个消息。(我不想用SetEvents,因为这是一个API,单纯的标准C++能够实现这样的功能吗?)
我尝试使用函数指针解决,但是函数指针要求的必须是静态指针,比如我想把消息到达的事件绑定给一个任意的类,这个类接受到消息以后,会自动的去链表中读取数据。函数指针直接绑定到这里类上似乎是不行的。
虚心请教高手给个思路,谢谢。

解决方案 »

  1.   

       如果是这样的话建义先定义一个纯虚类,比如
       class A
       {
         public:
         int ID = 0;
         virtual GetPack() = 0;
         
       };
       然后再用类继承A,在另外的类中实现GetPack(),然后将其他的类实例化,并且将指针封装在一个链表中,想给哪一个类发消息,就查找ID,再得到指针,然后强制转换类型,调用GetPack(),这样就OK,
      

  2.   

    创建一个隐藏的(不可见的窗口),然后发送消息给它sendMessage or postmessage就可以了。
    STA就是这样做的呀!
      

  3.   

    这个可以采用注册的方式来做,具体思路是:
    1)首先某个窗口向“TCP消息接受和发送的类”注册,告诉它,自己关心这个类型的数据。
    2)“TCP消息接受和发送的类”管理这个注册队列。
    3)接收到数据时,查找关心这类消息的句柄,然后使用SendMessage或者PostMessage发送该消息给这个类。
    至于如何通用,可以使用虚拟基类的方式来定义这个类。
    4)当对话框关闭时,告诉“TCP消息接受和发送的类”自己不再关系这类数据了,然后由“TCP消息接受和发送的类”管理这个注册队列删除这个对话框的句柄或者其他句柄。
    这样就可以减少发送消息的数量。