Windows C ++ Hvordan kan jeg kalde en blokerende læsning fra en tråd til en anden?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har to klasser i C ++ (Windows, Visual Studio 2010), hver kører en anden tråd, og jeg vil sende meddelelser mellem dem på en enkel måde. Ideen er, at hovedet kalder en læsning på klasse2, venter på klasse2 for at hente dataene, og så modtager hovedklassen det og fortsætter - noget som en stikkontakt, men mellem to klasser/tråde på samme program. Kan dette gøres?


Eksempel:


class MyClass(){
    ...
    void run(){...}; //runs a thread here that collects data from a network socket
};



int main(){
    MyClass *mc = new MyClass();
    mc->run();
    ...
    mc->receiveData(); //returns a value AFTER the class gets a hold of it, and blocks in the meantime...
}


Er der nogen enkel måde at gøre dette på? Det er ligesom at lave en stikkontakt, og læsning fra den, vil den ikke vende tilbage, før den modtager pakken/data fra netværket, undtagen jeg vil have en klasse til at gøre dette på det lokale system. Tak!

Bedste reference


Det lyder som om du vil have en tråd-sikker kø for at sætte dine beskeder på.


Tjek 'Parallelle beholdere og objekter' i Microsoft Parallel Patterns Library. Denne side har et eksempel på brugen af ​​concurrent\_vector. [3]

Andre referencer 1


Opret tråden og ring en tilslutning () på tråden. (Google det). Trådforbindelser vil give dig mulighed for at gyde en tråd til forarbejdning og angive, at når hovedet når tilslutningen, skal det vente på den tråd, det går sammen for at fuldføre. Du kan returnere en værdi fra tråden, når den vender tilbage til slutningsopgørelsen, så hovedpersonen kan kende resultatet, hvis du har brug for det.