我有一个具有功能class A
的void runThread()
来调用新线程。这是我的A.cpp
和struct SendInfo
和功能void thread(...)
不包含在头文件A.h
中:
//A.cpp
struct SendInfo{
int a;
std::string mess;
SendInfo(int _a, std::string _mess){
a = _a;
mess = _mess;
}
};
void thread(SendInfo* args){
std::cout << args->mess << std::endl; // Result here is nothing :-?
}
void A::runThread(){
SendInfo info(10,"dump_string");
std::cout << info.mess << std::endl; // Result here is "dump_string"
_beginthread((void(*)(void*))thread, 0, &info);
}
在主函数中,我调用
runThread()
的A object
时,info.mess
的结果很好,但是args->mess
没有字符串。那我怎么了以及如何解决? 最佳答案
您正在使用局部变量info
; runThread
退出后,此变量将超出范围,并且您不能再访问它,即使从另一个线程也是如此。
您需要确保info
的生存期可以延长到thread
函数的末尾(或者至少直到您在thread
中最后一次访问它为止)。