我有一个项目,它创建一个存储在头文件中的类的对象。 我需要将这个对象传递给main函数中的一个线程。
目前我使用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;
}
答案 0 :(得分:1)
您可以使用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;
}
答案 1 :(得分:0)
最简单的方法是将该Object作为头文件中的全局对象,并假设您包含了代码:
#include "headerFilesName.h"
在主要功能所在的文件中。然后我将使用main函数在文件中声明另一个对象,并将其值传递给它
headerFileName myNewObject;
使用头文件类的此对象,您应该能够访问最初创建的其他对象。
答案 2 :(得分:0)
只有一个灵活的解决方案 - 动态分配&#39; w&#39;使用operator new,将指针传递给CreateThread,将其强制转换回线程函数,当/如果线程函数退出/返回并且不再需要对象实例,则将其删除。
所有其他解决方案要么不能可靠地工作,要么是混乱的全球化,要么是不灵活的。