想,如果我通过CreateThread()
创建5个线程。我需要intergers 1,2,3,4,5传递给每个线程,但我也必须通过this
指针。我不能传递多个参数,因为CreateThread
函数只接受一个参数,也不能在类中创建成员变量,因为它将在线程之间共享。如何做到这一点以及线程堆栈有多少数据?我如何将数据传递给不同的线程
1
A
回答
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
相关问题
- 1. 使用Poco C++库,我如何将数据传递给线程?
- 2. 如何将参数传递给我的线程?
- 3. 如何将参数传递给c多线程中的线程
- 4. 如何将共享数据传递给Perl中的线程?
- 5. 如何将消息传递给线程
- 6. 如何将数据(结构)作为消息传递给线程。
- 7. 如何将数据传递给UI线程
- 8. Java多线程 - 将数据结构传递给线程
- 9. 将Edittext传递给线程
- 10. 如何将数据传递给MVVM Light中的不同视图?
- 11. 将数据传递给所有路线?
- 12. Android:将参数传递给线程
- 13. 将参数传递给Java线程
- 14. 将参数传递给多个线程
- 15. 将参数传递给线程
- 16. 将整数传递给线程
- 17. 将参数传递给线程
- 18. 将不同的值传递给java网络中的线程?
- 19. ,数据如何传递给我的Chaincode?
- 20. 我如何将凭据传递给UIWebView?
- 21. 传递参数给线程
- 22. 传递参数给线程
- 23. 无法将不同的字符串传递给多个线程
- 24. 将执行传递给Java中的不同/特定线程
- 25. 我如何将页面组值传递给SSRS中的不同数据集
- 26. 将不同的参数传递给IBAction
- 27. 如何将不同的数据值传递给Alfresco activiti多实例子进程
- 28. 如何将TIdTCPServer的多线串行数据传递给TIdTCPClient
- 29. 如何将文本文件中的行传递给java中的不同线程
- 30. 如何将多个参数传递给线程函数
http://www.codeproject.com/Tips/117653/C-MFC-Use-a-Thread-Delegator-for-your-threads – Ajay