我有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()
的{{1}},A object
的结果很好,但info.mess
没有字符串。那我的问题是什么?以及如何解决它?
答案 0 :(得分:4)
您正在使用本地变量info
;只要runThread
退出,此变量就会超出范围,您不能再访问它,即使是从另一个线程也是如此。
您需要确保info
的有效期延长到thread
函数的结尾(或至少,直到您最后一次访问thread
)
答案 1 :(得分:0)
Phillip Kendall所说的内容,另外,当你做出改变时,要警惕thead-safety - 不要只是全球化info
,将其封装在A
中。