0

関数を呼び出して変数値を変更するスレッドを作成しましたが、終了しても値は変更されていません。

これは単なる例であり、実際のコードではありません。

THREAD1:
 if(size = socket.recv(data))deserializeData(data)

deserializeData(){
 //Deserialize the data (csv format) and then copy to command
 command = tmp;
}

Outside the thread
cout << command

スレッドと deserializeData の内部でコマンドを呼び出すと正しく表示されますが、外部で cout を実行すると何も表示されません。

揮発性について見ましたが、文字列変数を試してみましたが、機能しません。

ありがとう

4

1 に答える 1

0

が複数のスレッド間で共有されている場合commandは、CriticalSection(または任意のお気に入りのロックメカニズム)を使用して、そのスレッドへのすべての読み取り/書き込みアクセスを保護する必要があります。そうしcoutないと、THREAD1が同時に書き込みを行う可能性があるため、ガベージを印刷し、何も出力せず、何を知っているかを知っているハードドライブをフォーマットする可能性がありますcommand

于 2012-04-24T18:42:34.247 に答える