2010-07-27 4 views
0

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

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

Я полностью в тупике.

ответ

2

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

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