我在线程1中收到各种各样的数据,然后通过消息通知、共享内存的方式传给线程2。现在遇到的问题是,数据类型有很多种(几十种甚至上百种),怎么样统一将不同的数据类型用统一的方式传输给线程2?我的解决办法不太好,就是在线程1中为这些数据分配内存,然后将其强制转换成LPVOID,用一个结构体存储这个指针,再在该结构体中附加类型信息,将这个结构体通过消息的wPARAM参数传给线程2,线程2再根据类型信息还原该数据,处理过后将其删除。现在的问题是,线程2如何根据该类型信息(int型或字符串型表示)来处理该数据?一个大的switch/case结构能够处理,但明显不够灵活,扩展也不方便。MFC的方式是动态创建,但我不能修改这几十个数据类型(类),为其加上动态创建的特性。(这些数据类型所在的库是第三方的,即使我有这个耐心一个一个的加动态创建特性,也无法办到)哪位高手有类似的经验?

解决方案 »

  1.   

    如果可能,定义一个或几个综合的结构,每个综合结构包含多个原来数据类型的所有信息。
    如果都是基本类型,用variant_t就可以,当然还有你定的类型码
      

  2.   


    谢谢回复。首先,我所指的数据类型不仅仅是基本类型,大多数是自定义的类,VARIANT好象不支持。其次,即使VARIANT支持自定义类,其内存效率也不高,因为其本质上是UNION。VARIANT是为了统一传输参数而设计的,而不是为了传输数据。
      

  3.   


    没错,这样可以部分解决问题,但每一次分配的UNION内存都比较大。除了这种浪费内存的作法,还有没有更高级的做法?(再排除动态创建)
      

  4.   

    还有一个问题,如果在将来的版本中要增加UNION成员,那么使用新UNION所在的库的程序或库也要做相应的更新,这将给版本的发布带来一些问题。
      

  5.   

    通过全局的容器来进行两个线程之间的数据交互,线程1将数据放入容器,
    线程2从容器中拿出来使用,不过对全局容器的操作时注意进行同步。
    这样就无需对数据类型进行LPVOID的转换了。
      

  6.   


    能不能说得详细点?全局的容器?你是指vector?list? 接收线程如何知道数据类型?