請問所有那些CORBA專家在那裏請幫助我解決這個問題。C++ CORBA DII問題
我有一個多線程的應用程序,有一些代碼發送消息到服務器,並等待迴應。我可以看到服務器正在發送迴應,但應用程序似乎並未收到它。
繼承人我的代碼的一部分。
// 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上工作。
對不起,沒有澄清它,但我只是給代碼添加了一條評論。這個特定的輪詢在while循環中的一個單獨的函數中。所以它總是循環檢查響應。正如我在上面提到的,您將在TAO上看到「輪詢...」輸出,而在omniORB上它將立即返回。 – nixgadgets 2010-09-28 05:43:26
沒有probs,@kuzyt,我會把它做成CW,因爲它沒有那麼有用,但我會把它留在這裏作爲記錄。 – paxdiablo 2010-09-28 05:54:15