C++ pthreads参数问题
我在应用程序中使用pthread进行多线程处理,如下所示:C++ pthreads参数问题,c++,pthreads,C++,Pthreads,我在应用程序中使用pthread进行多线程处理,如下所示: pthread_create(&id1, NULL, &RecvMessageManager::test, args); args基本上是由另一个对象的实例和回调引用组成的结构,如下所示: struct Args { Obj * msgObj; void (*callBack)(std::string& header, std::string& payload); }; 使用msgO
pthread_create(&id1, NULL, &RecvMessageManager::test, args);
args
基本上是由另一个对象的实例和回调引用组成的结构,如下所示:
struct Args {
Obj * msgObj;
void (*callBack)(std::string& header, std::string& payload);
};
使用msgObj
,我在while循环中连续调用它的一个方法。第一次调用方法,但在下一个循环中,msgObj
将变为null
为什么会这样
编辑
线程内实例的构造
struct Args * args = (struct Args *)val;
this -> msgObj = args -> msgObj;
this -> callBack = args -> callBack;
RecvMessageManager * thisObj = args -> thisObj;
Args
实例是如何构造的,在哪里构造的?你能发布更多的代码吗?此外,如果回调签名是Obj
函数的成员,则它是不正确的。应该是void(Obj::*回调)(std::string和header,std::string和payload)
@hmjd感谢您的输入。我已更新了您要求的代码。我正确地重建了Args
的实例。谢谢大家。我得到了答案。我正在正确地重建struct Args
。但问题是,我将它们分配给全局变量,该变量稍后在线程中被访问。只需将它们分配给局部变量就解决了问题。在上面显示的代码中,我将msgObj
更改为局部变量。