Определите структуру и передайте объект этой структуры.
Структура может быть такой:
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
.