Вопрос
Может ли все эти эксперты CORBA там, пожалуйста, помогите мне с этим.
У меня есть многопоточное приложение с некоторым кодом, который отправляет сообщение на сервер и ждет возврата ответа. Я вижу, что сервер отправляет ответ обратно, однако, что приложение не получит его.
Вот часть моего кода.
// Create a request object for the given message
msg.request = serverRef->_request("receiveCoreMessageVia");
msg.request->set_return_type (CORBA::_tc_short);
msg.request->add_in_arg() <<= msg.sourceGateway;
msg.request->add_in_arg() <<= msg.octetSeq;
msg.request->send_deferred();
...
// The following code is in a while loop in a different function. It uses the request reference to check the response.
// Check if the request has completed
if (!msg->request->poll_response())
{
clssendlog << debug << "Polling..." << endl;
return false; // No response yet
}
// Get the returned result
clssendlog << debug << "Get response..." << endl;
msg->request->get_response();
clssendlog << debug << "Reading the returned response value" << endl;
CORBA::Short tmp = 0;
msg->request->return_value () >>= tmp;
Результатом заключается в том, что он продолжает говорить о опросе, даже если сервер отвечает. Это основной вызов DII, и я на самом деле проверяю код на ACE / TAO 5.7.9. Этот точный код отлично работает на Omniorb 4.1.4. Тем не менее, я действительно хочу, чтобы это работать над Ace / Tao.
Решение
Удалось исправить, изменив ссылку на объект от _PTR на _var. Я написал небольшое тестовое приложение для проверки этого. После изменения указателя типа его ведущее ведение себя как ожидалось, обслуживая ответы. Таким образом, проблема получила начальную ссылку на интерфейс.
Другие советы
Я не слишком уверен в этом, но это кажется мне, что вы будете выход Эта функция, если первый ответ опроса терпит неудачу. Затем, когда вы вернетесь, вы отправите еще один сообщение (с send_deferred()
Звоните), независимо от первого.
Это означает, что, если вы не ударите его повезло, и ответ появляется до того, как вы позвоните poll_response()
, Вы всегда получите опрос.