C++ pthreads参数问题

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进行多线程处理,如下所示:

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
更改为局部变量。