2016-05-30 4 views
0

私はクラス(A)のスレッドで私のアプリケーションにデータをストリームする関数を持っています。 データは、別のクラスのヘッダファイル(B)のカスタム構造体(StructStore)にコピーされる:私はブレークポイントを追加するとスレッド内の値をメインスレッドにコピーする方法を教えてください。

.H

class Data: 
public: 
    StructStore DataStore; 

の.cpp

Data dd; 

    StructStore DataIn; // data streams in 

    dd.DataStore = DataIn; 

ここで(スレッド内の)値をチェックすると、データストアとDataInの両方で期待通りのものになります。

私が必要とするのは、これらの値を別のクラス(C)のスレッド外から呼び出すことです。私がしようとしています:

た.cpp

StructStore Result; 
    Data d; 

    Result = d.DataStore; 

私はここの値をチェックすると、彼らは常にゼロですが。私はここで間違って何をしていますか?これらの値を安全にスレッドの外部にコピーするにはどうすればよいですか?

+0

競合状態から身を守り、 'std :: mutex'のような保護メカニズムを使用したいと思うかもしれません。 –

+1

あなたはどのスレッドライブラリを使用していますか? [最小限のコード](http://stackoverflow.com/help/mcve)または少なくとももう少し提供することは可能ですか? – coyotte508

+0

私はUnrealエンジン用のプラグインを作成していますが、スレッドはFRunnableクラスを使用して実行されています。 https://docs.unrealengine.com/latest/INT/API/Runtime/Core/HAL/FRunnableThread/index.html – anti

答えて

1

簡単で安全な方法(100%最も効率的ではありません)は、pipeを使用することです。メインスレッドを読み込み(1つのワーカースレッドのみをブロックするか、複数のパイプを待機させる場合はselect()を使用してください)。その後、あなたのワーカースレッドwrite()に構造体を持ってください。各書き込みのサイズがPIPE_BUFバイト未満の場合、同時にロックすることなくパイプに複数のスレッドを書き込むことさえできます。

+0

ありがとう!これは窓のオプションですか? – anti

+0

3Dシューティングゲームでは非常に遅いでしょう。私はあなたがここを見てお勧めしますhttp://www.modernescpp.com/index.php/threads-sharing-data – strangeqargo

関連する問題