我想 在COM组建里  写几个线程,一个TCP 的接收 ,一个TCP 的发送,线程的开启该怎么写呢?写在哪里?(写在DLLmain 里?) 跟WIN32 的写法一样吗?     头痛啊,COM的线程模型 有点糊涂,不知道怎么弄,如果 跟WIN32差别很大,还望给个例子啊 

解决方案 »

  1.   

    可普通的Win32线程使用基本一样.线程开启可以通过事件或接口的方法中开启.
    COM线程需要注意的是接口传递,必去使用列集散集的模式传递接口,使用CoMarshallnterThreadInterfaceInStream和CoGetInterfaceAndReleaseStream函数
      

  2.   

    你在COM组件里启动线程跟Win32没啥区别,不要把这跟COM组件的线程模型搞混,COM组件的线程模型主要是针对调用者而言的。
      

  3.   


     恩,是有点搞糊涂了, 那如果 我是 一个客户程序调用 的话,里面有不同的对话框 界面 来 使用COM组建的接口,那就应该考虑 COM组建的线程模型了吧 ?
      

  4.   

    先用MFC写好,调试完,然后移植进COM,引出接口,
      

  5.   

    就写普通的win32程序
    封装成com就可以了
      

  6.   

    DWORD m_dwThread; 
    //线程启动标致 
    BOOL m_bCreatFunc; 
    // 线程的句柄 
    HANDLE m_HandleThread; DWORD WINAPI XXXXXX::RecvDataProc(LPVOID lParam) 

    ((XXXXXX*)lParam)->RecvDataFunc(); 
    return 0; 
    } int XXXXXX::RecvDataFunc() 
    {   while(m_bCreatFunc) 
      { 
        //这里面是放线程工作的内容 
      } 
      return 1; 
    } //创建接收线程 
    int XXXXXX::CreateRecvDataThrd() 

    if(m_HandleThread==NULL) 

    m_HandleThread = CreateThread(NULL,0,RecvDataProc,this,0,&m_dwThread); if(m_HandleThread == NULL) 

    TRACE("创建接收消息线程失败!!\n"); 
    return 1; 

    else 

    m_bCreatFunc = TRUE; 
    TRACE("创建接收消息线程成功!!\n"); 

    } return 0; 
    }
      

  7.   


    首先看你是否会把一个对象的指针在多个线程间使用,跟有几个对话框界面没关系的。如果你每个线程都是一个独立的对象,并且COM组件里也没用到全局的变量等,根本就不用考虑线程模型。
    如果你的一个对象支持在不同线程里使用,这时你就要考虑COM组件线程模型以及套件等。这部分比较绕,有时不能立刻理解。具体可以参考网上别人对这两个概念的理解,随便Google了一个:
    http://blog.csdn.net/crybird/archive/2008/10/11/3057067.aspx
      

  8.   

    看你这个需求,应该跟普通WIN32应用程序线程一样