创建线程的线程参数,,现在有一个问题没想明白
我要给线程传递 一个单独的标志负 SOCKET
还要给线程传递 一个标志符,,bIsRunning
以上两个标志不能影响或者被其他线程影响。。线程中就是这样的
while (bIsRunning)
{
recv(socket,....)
}
还有一个 类的指针。。现在bIsRunning 需要由外界控制来关闭线程。这个参数怎么传递?
我要给线程传递 一个单独的标志负 SOCKET
还要给线程传递 一个标志符,,bIsRunning
以上两个标志不能影响或者被其他线程影响。。线程中就是这样的
while (bIsRunning)
{
recv(socket,....)
}
还有一个 类的指针。。现在bIsRunning 需要由外界控制来关闭线程。这个参数怎么传递?
如果还有其他数据,就都包到一个结构体,然后传结构体指针
struct uData;
uData.bIsRunning = false; //修改
传线程的时候传&uData
typedef struct _THREAD_INFO
{
SOCKET socket;
bool bIsRunning;
}ThreadInfo, *PThreadInfo;
在你的类中定义如下成员变量,DWORD对应线程ID,PThreadInfo对应其信息
map<DWORD, PThreadInfo> m_ThreadInfo;
每一个线程建立的时候,new一个PThreadInfo,加入到map中,这样在线程外也可以改变bIsRunning了。
lParam
转换成什么?
ThreadInfo *pinfo = (ThreadInfo *)lparam
还是
ThreadInfo stinfo = *(ThreadInfo *)lparam 关键是我在外面修改相对应的 bIsRunning 的时候能够让线程里面的运行标志一起发生改变!
{
SOCKET socket;
bool& bIsRunning;
}ThreadInfo, *PThreadInfo;
while (bIsRunning)
bIsRunning 要定义成volatile的,不然可能因编译器优化而导致线程无法退出。
ThreadInfo *pinfo = (ThreadInfo *)lparam
为了在线程外的修改能线程内进行反映
传递结构体指针,即
ThreadInfo *pinfo = (ThreadInfo *)lparam而结构定义成#5楼
typedef struct _THREAD_INFO
{
SOCKET socket;
bool bIsRunning;
}ThreadInfo, *PThreadInfo;