这段代码运行成功,MQStruct 构造函数也初始化了值,我可以在 ExecuteThread 函数中看到,但在 TestFunction 中,我得到了 MQStruct 的垃圾值。
我正在将结构“&MQStructObj”的地址传递给 _beginthreadex 作为参数,这就是我猜的问题
struct MQStruct {
MQStruct()
{
pointer=NULL;
serviceName=NULL;
durability=0;
msgType=0;
msgHeader=0;
msgId=NULL;
payload=NULL;
payloadSize=0;
ttl=0;
priority=0;
}
void* pointer;
wchar_t *serviceName;
int durability;
int msgType;
int msgHeader;
wchar_t *msgId;
wchar_t *payload;
int payloadSize;
int ttl;
int priority;
};
int ExecuteThread() {
HANDLE heartBeatThread;
unsigned int hbThreadID;
int result = 0;
MQStruct MQStructObj;
MQStructObj.pointer=this;
heartBeatThread = (HANDLE)_beginthreadex(NULL, 0 , &TestFunction, &MQStructObj, 0/*CREATE_SUSPENDED*/, &hbThreadID);
if ( heartBeatThread == 0 )
{
result = -1;
LogEvent(DEBUG_LOG,0, "Fail to create thread");
}
CloseHandle(heartBeatThread);
return result;
}
最佳答案
你猜对了。
您正在将一个局部变量的地址传递给您的 thread-proc-startup,然后离开作用域(并销毁进程中的对象)。在您的线程过程中对该对象的引用是此后未定义的行为。
用new
动态分配一个并让线程处理delete
它。
关于c++ - 将结构对象作为参数传递给线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14338470/