创建线程的线程参数,,现在有一个问题没想明白
我要给线程传递 一个单独的标志负  SOCKET 
还要给线程传递  一个标志符,,bIsRunning  
以上两个标志不能影响或者被其他线程影响。。线程中就是这样的
while (bIsRunning)
{
   recv(socket,....)
}
还有一个 类的指针。。现在bIsRunning 需要由外界控制来关闭线程。这个参数怎么传递?

解决方案 »

  1.   

    bIsRunning 设置成全局的变量
      

  2.   

    如果需要外面控制,就把bIsRunning作为外面类的成员变量,然后传类指针进去,然后其他地方通过访问成员变量来修改
    如果还有其他数据,就都包到一个结构体,然后传结构体指针
      

  3.   

    bIsRunning 必须作为线程单独参数使用,传递结构体可以,因为bIsRunning 只控制单个线程启动结束 我这个是多线程的。。但是我不知道怎么在外部改变这个值谁知道的。我想用stl来做的,但是stl好像还是无法在外部改变线程里面的值!
      

  4.   

    传结构体指针啊,然后直接修改这个结构体的成员
    struct uData;
    uData.bIsRunning = false; //修改
    传线程的时候传&uData
      

  5.   

    定义如下结构体:
    typedef struct _THREAD_INFO
    {
    SOCKET socket;
    bool bIsRunning;
    }ThreadInfo, *PThreadInfo;
    在你的类中定义如下成员变量,DWORD对应线程ID,PThreadInfo对应其信息
    map<DWORD, PThreadInfo> m_ThreadInfo;
    每一个线程建立的时候,new一个PThreadInfo,加入到map中,这样在线程外也可以改变bIsRunning了。
      

  6.   

    在线程里面 吧
    lParam
    转换成什么?
    ThreadInfo *pinfo = (ThreadInfo *)lparam
    还是
    ThreadInfo stinfo = *(ThreadInfo *)lparam 关键是我在外面修改相对应的 bIsRunning 的时候能够让线程里面的运行标志一起发生改变!
      

  7.   

    那么你传递的时候不i要用对象,用引用,或指针,这样外面修改了,你线程里再次访问就会是更新的typedef struct _THREAD_INFO
    {
        SOCKET    socket;
        bool&    bIsRunning;
    }ThreadInfo, *PThreadInfo;
      

  8.   

    补充一下:
    while (bIsRunning)
    bIsRunning 要定义成volatile的,不然可能因编译器优化而导致线程无法退出。
      

  9.   

    转换成什么?
    ThreadInfo *pinfo = (ThreadInfo *)lparam

    为了在线程外的修改能线程内进行反映
    传递结构体指针,即
    ThreadInfo *pinfo = (ThreadInfo *)lparam而结构定义成#5楼 
    typedef struct _THREAD_INFO
    {
        SOCKET    socket;
        bool    bIsRunning;
    }ThreadInfo, *PThreadInfo;