假设我通过CreateThread()
创建了5个主题。我需要将interger 1,2,3,4,5传递给每个线程,但我还必须传递一个 this
指针。我不能传递多个参数,因为CreateThread
函数只接受一个,我也不能在类中创建成员变量,因为它将在线程之间共享。怎么做以及线程堆栈有多少数据?
答案 0 :(得分:4)
定义结构并传递此结构的对象。
结构可以是这样的:
struct ThreadContext
{
MyClass *m_this;
int m_int;
//add more members you need to pass more data
};
然后你可以这样做:
for ( int i = 0 ; i < 5 ; i++ )
{
ThreadContext *ctx = new ThreadContext();
ctx->m_this = this;
ctx->m_int = i ;
CreateThread(...., ThreadProc, ctx, ...);
}
确保传递给每个线程的对象是不同的对象。这就是我使用new
并为每个线程创建一个对象的原因。然后在ThreadFunc
内,使用static_cast
作为:
DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
ThreadContext *ctx = static_cast<ThreadContext*>(lpParameter);
//use ctx
//...
//at the end of the thread, deallocate the memory!
delete ctx;
}
或者,您可以将std::vector<ThreadContext>
维护为MyClass
的成员数据。
答案 1 :(得分:1)
也许创建一个包含this指针和整数的新结构,并将其传递给线程,在线程运行的函数中适当地提取这些内容?