首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

创建线程时传递参数解决办法

2012-04-03 
创建线程时传递参数C/C++ codefor (int index 0 index m_nThreadNumber ++index){ThreadParam threa

创建线程时传递参数

C/C++ code
    for (int index = 0; index < m_nThreadNumber; ++index)    {        ThreadParam thread_param;        thread_param.pCSocketIocp = this;        thread_param.nThreadNum = index + 1;        //保存所有线程句柄,为了退出时利用WariForMultipleObject确保所有线程安全退出        m_pThreadHandle[index] = ::CreateThread(NULL, 0, WorkerThread, static_cast<void*>(&thread_param), 0, NULL);    }

由于线程参数用的是指针方式,那么有可能因为在创建了多个线程之后,线程才得到执行机会,此时从参数指针那里获取的参数可能已经改变了

比如创建第一个线程时,给的thread_param.nThreadNum = 1;
比如创建第二个线程时,给的thread_param.nThreadNum = 2;

当创建完第二个线程时,线程1才得到执行机会,此时得到的thread_param.nThreadNum = 2

除了sleep,setevent方式外,有没有别的方式?


[解决办法]
弄个thread param数组来存
[解决办法]
1) 把 pCSocketIocp 放到 m_pThreadHandle[index] 中,然后传递 index的值 进去.
2) 线程局部储存 TLS

热点排行