2016-05-30 5 views
0

Ich habe eine Funktion, die Daten in einem Thread in Klasse (A) in meine Anwendung streamt. Die Daten werden in einer benutzerdefinierten Struktur (StructStore) in der Header-Datei einer anderen Klasse (B) kopiert:Wie soll ich Werte innerhalb eines Threads in den Hauptthread kopieren?

.h

class Data: 
public: 
    StructStore DataStore; 

CPP

Data dd; 

    StructStore DataIn; // data streams in 

    dd.DataStore = DataIn; 

Wenn ich einen Haltepunkt hinzufügen und überprüfen Sie die Werte hier (innerhalb des Threads), sie sind so wie ich es erwarten würde, sowohl im DataStore, als auch im DataIn.

Was ich brauche, ist, diese Werte von außerhalb des Threads in noch einer anderen Klasse (C) zu nennen. Ich versuche:

CPP

StructStore Result; 
    Data d; 

    Result = d.DataStore; 

Wenn ich die Werte hier überprüfen, sie sind immer Null. Was mache ich hier falsch? Wie kann ich diese Werte sicher außerhalb des Threads kopieren?

+0

Sie möchten sich wahrscheinlich vor rassistischen Bedingungen schützen und einen Schutzmechanismus wie 'std :: mutex' verwenden. –

+1

Welche Threading-Bibliothek verwenden Sie? Ist es möglich, einen [minimalen Code] (http://stackoverflow.com/help/mcve) oder zumindest ein bisschen mehr zur Verfügung zu stellen? – coyotte508

+0

Ich schreibe ein Plugin für unreal engine, das Threading erfolgt mit der Funnable-Klasse: https://docs.unrealengine.com/latest/INT/API/Runtime/Core/HAL/FRunnableThread/index.html – anti

Antwort

1

Ein einfacher und sicherer (aber nicht der 100% effizienteste) Weg ist die Verwendung eines pipe. Lassen Sie Ihren Haupt-Thread davon lesen (blockieren Sie entweder nur einen Worker-Thread oder verwenden Sie select(), wenn mehrere Pipes warten sollen). Dann haben Sie Ihren Worker-Thread write() die Struktur dazu. Sie können sogar mehrere Threads gleichzeitig in die Pipe schreiben lassen, ohne zu sperren, wenn die Größe jedes Schreibvorgangs weniger als PIPE_BUF Bytes beträgt.

+0

Danke! Ist das eine Option für Windows? – anti

+0

wird es sehr langsam für ein 3D-Shooter-Spiel sein. Ich schlage vor, dass Sie hier http://www.modernescpp.com/index.php/threads-sharing-data schauen – strangeqargo