2011-08-24 70 views
1

想,如果我通過CreateThread()創建5個線程。我需要intergers 1,2,3,4,5傳遞給每個線程,但我也必須通過this指針。我不能傳遞多個參數,因爲CreateThread函數只接受一個參數,也不能在類中創建成員變量,因爲它將在線程之間共享。如何做到這一點以及線程堆棧有多少數據?我如何將數據傳遞給不同的線程

+0

http://www.codeproject.com/Tips/117653/C-MFC-Use-a-Thread-Delegator-for-your-threads – Ajay

回答

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成員數據。

+2

好答案!謝謝。 – user675341

+0

你可以考慮使用'ThreadContext'結構的模板參數,並使用它來代替'MyClass',這會使它更通用。 – Ajay

1

也許創建包含該指針和整數的新的結構,並傳遞給線程,在該線程運行的功能適當地提取這些內容?

+0

我不明白爲什麼這是downvoted,下面的答案几乎說完全一樣的東西。 – MGZero

+0

納瓦茲的評論似乎是有後,我點擊「發表新評論」,所以我認爲他到了那裏首先由幾秒鐘(與一個更全面的答覆!)。 –

+0

是的,但沒有必要downvote你。 – MGZero