Windows C ++ Как я могу вызвать блокирующее чтение из одного потока в другой? - PullRequest
0 голосов
/ 19 августа 2011

У меня есть два класса в C ++ (Windows, Visual Studio 2010), каждый из которых работает по отдельному потоку, и я хочу отправлять сообщения между ними простым способом. Идея состоит в том, что main вызывает чтение для class2, ожидает, пока class2 получит данные, а затем main class получает их и продолжает - что-то вроде сокета, но между двумя классами / потоками в одной программе. Можно ли это сделать?

Пример:

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...
}

Есть ли простой способ сделать это? Вроде как создание сокета и чтение из него, он не вернется, пока не получит пакет / данные из сети, за исключением того, что я хочу, чтобы класс делал это в локальной системе. Спасибо!

Ответы [ 2 ]

1 голос
/ 19 августа 2011

Создайте поток и вызовите join () для потока.(Google это).Присоединения к потокам позволят вам создать поток для обработки и указать, что как только main достигнет объединения, он должен ждать завершения потока, к которому присоединяетсяВы можете вернуть значение из потока, когда оно вернется в операторе соединения, чтобы main мог знать результат, если он вам нужен.

0 голосов
/ 19 августа 2011

Звучит так, будто вы хотите, чтобы потокобезопасная очередь помещала ваши сообщения.

Ознакомьтесь с разделом «Параллельные контейнеры и объекты» в библиотеке Microsoft Parallel Patterns .На этой странице есть пример использования concurrent_vector.

...