我有一个具有功能class Avoid runThread()来调用新线程。这是我的A.cppstruct 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中最后一次访问它为止)。

10-08 14:33