[英]Passing an object to a thread in C++
我有一个项目,该项目创建存储在头文件中的类的对象。 我需要将此对象从主函数传递到线程中。
目前,我正在使用hChatThread = CreateThread(NULL,0,ChatFunc,"1",0,&dwChatThreadId);
作为创建线程的一种方式,看来我无法改变被调用函数只能将LPVOID
作为类型的事实。 如果我可以以某种方式更改它,则可以像这样将对象作为参数传递: hChatThread = CreateThread(NULL,0,ChatFunc,myObject,0,&dwChatThreadId);
但这似乎几乎是不可能的。
有任何想法吗?
线:
DWORD WINAPI ChatFunc(LPVOID randparam)
{
ServerMain(myObject); //need to pass object again here to be used in other functions
return 0;
}
主要:
int main(int argc, char *argv[])
{
myObject w;
w.exec();
hChatThread = CreateThread(NULL,0,ChatFunc,"1",0,&dwChatThreadId);
return 0;
}
您可以使用LPVOID lpParameter
将指针传递给对象,然后将其LPVOID lpParameter
回退。 像这样:
int main(int argc, char *argv[])
{
myObject w;
w.exec();
hChatThread = CreateThread(NULL,0,ChatFunc,&w,0,&dwChatThreadId);
// wait for the thread to terminate,
// otherwise w might get destroyed while the thread
// is still using it (see comments from @MartinJames)
return 0;
}
DWORD WINAPI ChatFunc(LPVOID param)
{
myObject* p = static_cast<myObject*>(param);
ServerMain(p); //need to pass object again here to be used in other functions
return 0;
}
最简单的方法是使该对象成为头文件中的全局对象,并假定您包含以下代码:
#include "headerFilesName.h"
在您主要功能所在的文件中。 然后我将使用main函数在文件中声明另一个对象,然后将其值传递给它
headerFileName myNewObject;
使用头文件类的该对象,您应该能够访问最初创建的另一个对象。
只有一种灵活的解决方案-使用new运算符动态分配'w',将指针传递给CreateThread,将其强制转换回线程函数中,并且,当/如果线程函数退出/返回且不再需要对象实例,则删除它。
所有其他解决方案要么运行不可靠,要么全局混乱,要么不灵活。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.