想,如果我通过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. 如何将参数传递给c多线程中的线程
- 3. 如何将消息传递给线程
- 4. 如何将数据传递给UI线程
- 5. Java多线程 - 将数据结构传递给线程
- 6. 将Edittext传递给线程
- 7. 将不同的值传递给java网络中的线程?
- 8. 将参数传递给多个线程
- 9. 将参数传递给线程
- 10. Android:将参数传递给线程
- 11. 我如何将凭据传递给UIWebView?
- 12. 传递参数给线程
- 13. 将执行传递给Java中的不同/特定线程
- 14. 无法将不同的字符串传递给多个线程
- 15. 将不同的参数传递给IBAction
- 16. 如何将不同的数据值传递给Alfresco activiti多实例子进程
- 17. 如何将多个参数传递给线程函数
- 18. 如何将多个参数传递给C中的线程
- 19. SSRS 2005将不同参数传递给同一数据集
- 20. 如何将数据传递给方法
- 21. 如何将数据传递给CActiveForm
- 22. 如何将数据表传递给Mysql
- 23. iOS:如何将数据传递给applicationDidFinishLaunching:?
- 24. 如何将数据传递给UITabBarController
- 25. 如何将数据传递给BroadcastReceiver?
- 26. 如何将数据传递给IFTTT WebHook?
- 27. 如何将数据传递给SectionList?
- 28. 如何将数据传递给ASP.NET WebAPI
- 29. 如何将数据传递给UITabBarController?
- 30. 如何将数据传递给_Layout.cshtml
http://www.codeproject.com/Tips/117653/C-MFC-Use-a-Thread-Delegator-for-your-threads – Ajay