创建线程时传递参数解决办法
创建线程时传递参数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