如何将数据传递到不同的线程

时间:2011-08-24 16:07:40

标签: c++ multithreading winapi

假设我通过CreateThread()创建了5个主题。我需要将interger 1,2,3,4,5传递给每个线程,但我还必须传递一个 this 指针。我不能传递多个参数,因为CreateThread函数只接受一个,我也不能在类中创建成员变量,因为它将在线程之间共享。怎么做以及线程堆栈有多少数据?

2 个答案:

答案 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指针和整数的新结构,并将其传递给线程,在线程运行的函数中适当地提取这些内容?