在C ++ <process.h> </process.h>中的头文件的cpp文件中启动一个线程

时间:2012-07-04 08:22:32

标签: c++ multithreading

我有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没有字符串。那我的问题是什么?以及如何解决它?

2 个答案:

答案 0 :(得分:4)

您正在使用本地变量info;只要runThread退出,此变量就会超出范围,您不能再访问它,即使是从另一个线程也是如此。

您需要确保info的有效期延长到thread函数的结尾(或至少,直到您最后一次访问thread

答案 1 :(得分:0)

Phillip Kendall所说的内容,另外,当你做出改变时,要警惕thead-safety - 不要只是全球化info,将其封装在A中。