0

新しいスレッドを呼び出す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、文字列がありません。それで、私の問題は何ですか?そしてそれを解決する方法は?

4

2 に答える 2

4

ローカル変数を使用していますinfo。終了するとすぐにrunThread、この変数はスコープ外になり、他のスレッドからでもアクセスできなくなります。

関数の最後まで (または、少なくとも で最後にアクセスするまで)info存続期間が延長されるようにする必要があります。threadthread

于 2012-07-04T08:25:34.823 に答える
0

Phillip Kendallが言ったこと、さらに、変更を加えるときは広告の安全性に注意してください。グローバル化するだけでなくinfo、カプセル化してAください。

于 2012-07-04T08:33:45.510 に答える