C ++ Singleton Threading проблема - PullRequest
0 голосов
/ 27 июля 2010

У меня есть C ++ singleton, который работает как отдельный поток.Этот синглтон является производным от базового класса, предоставляемого библиотекой, и переопределяет метод onLogon (...).Метод onLogon является синхронным, он хочет сразу узнать, принимаем ли мы попытку входа в систему.

Проблема в том, что нам нужно передать информацию для входа в систему через сообщение на сервер безопасности.Мы можем зарегистрировать обратный вызов в прослушивателе сервера безопасности (отдельный поток), чтобы получить результаты отправленного нами сообщения аутентификации входа.Мой вопрос заключается в том, как заблокировать метод onLogon, чтобы можно было разбудить поток при помощи обратного вызова, зарегистрированного в потоке прослушивателя сервера безопасности, и как я могу затем получить доступ к ответу, возвращенному сервером безопасности в потоке-обезопасный способ (т. е. мне нужно иметь возможность обрабатывать несколько одновременных запросов входа в систему).

Я в полном замешательстве.

Ответы [ 2 ]

2 голосов
/ 27 июля 2010

Использовать пустой семафор. После отправки учетных данных на сервер безопасности возьмите семафор. Поскольку он будет пустым, он заблокирует выполнение. Затем отправьте функцию обратного вызова в семафор. Это затем возобновит выполнение в исходном потоке.

Поскольку обратные вызовы обычно позволяют передавать анонимное значение в качестве параметра, вы можете зарегистрировать указатель на структуру данных, которая может быть заполнена ответом.

0 голосов
/ 28 июля 2010

В итоге я пошел с boost :: обещанием и boost :: unique_future.Это было идеально для того, что мне нужно.

http://www.boost.org/doc/libs/1_43_0/doc/html/thread/synchronization.html#thread.synchronization.futures

...