本文整理汇总了C++中MessageQueue::enqueue方法的典型用法代码示例。如果您正苦于以下问题:C++ MessageQueue::enqueue方法的具体用法?C++ MessageQueue::enqueue怎么用?C++ MessageQueue::enqueue使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MessageQueue
的用法示例。
在下文中一共展示了MessageQueue::enqueue方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: handleEnqueue
void CIMListenerIndicationDispatcher::handleEnqueue(Message* message)
{
PEG_METHOD_ENTER(TRC_SERVER,
"CIMListenerIndicationDispatcher::handleEnqueue");
if(message!=NULL)
{
switch (message->getType())
{
case CIM_EXPORT_INDICATION_REQUEST_MESSAGE:
{
CIMExportIndicationRequestMessage* request =
(CIMExportIndicationRequestMessage*)message;
CIMExportIndicationResponseMessage* response =
static_cast<CIMListenerIndicationDispatcherRep*>(_rep)->
handleIndicationRequest(request);
MessageQueue* queue = MessageQueue::lookup(response->dest);
PEGASUS_ASSERT(queue != 0);
queue->enqueue(response);
}
break;
default:
break;
}
delete message;
}
PEG_METHOD_EXIT();
}
示例2: handle_AsyncLegacyOperationStart
void MessageQueueService::handle_AsyncLegacyOperationStart(AsyncLegacyOperationStart *req)
{
// remove the legacy message from the request and enqueue it to its destination
Uint32 result = async_results::CIM_NAK;
Message *legacy = req->_act;
if (legacy != 0)
{
MessageQueue* queue = MessageQueue::lookup(req->_legacy_destination);
if (queue != 0)
{
if (queue->isAsync() == true)
{
(static_cast<MessageQueueService *>(queue))->handleEnqueue(legacy);
}
else
{
// Enqueue the response:
queue->enqueue(req->get_action());
}
result = async_results::OK;
}
}
_make_response(req, result);
}
示例3: handleEnqueue
void CIMExportRequestDispatcher::handleEnqueue(Message* message)
{
PEG_METHOD_ENTER(TRC_EXP_REQUEST_DISP,
"CIMExportRequestDispatcher::handleEnqueue");
PEGASUS_ASSERT(message != 0);
switch (message->getType())
{
case CIM_EXPORT_INDICATION_REQUEST_MESSAGE:
{
CIMExportIndicationResponseMessage* response =
_handleExportIndicationRequest(
(CIMExportIndicationRequestMessage*) message);
PEG_TRACE((
TRC_HTTP,
Tracer::LEVEL4,
"_CIMExportRequestDispatcher::handleEnqueue(message) - "
"message->getCloseConnect() returned %d",
message->getCloseConnect()));
response->setCloseConnect(message->getCloseConnect());
MessageQueue* queue = MessageQueue::lookup(response->dest);
PEGASUS_ASSERT(queue != 0);
queue->enqueue(response);
break;
}
default:
PEGASUS_UNREACHABLE(PEGASUS_ASSERT(0);)
break;
}
示例4: fibonacci
PEGASUS_THREAD_RETURN PEGASUS_THREAD_CDECL fibonacci(void * parm)
{
Thread* my_thread = (Thread *)parm;
parmdef * Parm = (parmdef *)my_thread->get_parm();
int first = Parm->first;
int second = Parm->second;
int count = Parm->count;
Condition * condstart = Parm->cond_start;
MessageQueue * mq = Parm->mq;
condstart->signal(my_thread->self());
int add_to_type = 0;
if (count < 20)
add_to_type = 100;
for (int i=0; i < count; i++)
{
int sum = first + second;
first = second;
second = sum;
Message * message = new Message(i+add_to_type, 0, sum);
mq->enqueue(message);
}
if (!add_to_type)
Parm->th->thread_switch();
my_thread->exit_self(0);
return NULL;
}
示例5: sendResponse
void CIMExportRequestDecoder::sendResponse(
Uint32 queueId,
Buffer& message,
Boolean closeConnect)
{
MessageQueue* queue = MessageQueue::lookup(queueId);
if (queue)
{
HTTPMessage* httpMessage = new HTTPMessage(message);
httpMessage->setCloseConnect(closeConnect);
queue->enqueue(httpMessage);
}
}
示例6: sendResponse
void CIMOperationRequestAuthorizer::sendResponse(
Uint32 queueId,
Array<char>& message)
{
PEG_METHOD_ENTER(TRC_SERVER, "CIMOperationRequestAuthorizer::sendResponse");
MessageQueue* queue = MessageQueue::lookup(queueId);
if (queue)
{
AutoPtr<HTTPMessage> httpMessage(new HTTPMessage(message));
queue->enqueue(httpMessage.release());
}
PEG_METHOD_EXIT();
}
示例7: TestMessageQueue3
void TestMessageQueue3()
{
MessageQueue q;
Uint32 sum = 0;
for (Uint32 i = 1; i <= 5; i++)
{
q.enqueue(new Alarm(i));
sum += i;
}
assert(sum == 15);
while (!q.isEmpty())
q.remove(q.back());
assert(q.getCount() == 0);
}
示例8: TestMessageQueue1
void TestMessageQueue1()
{
MessageQueue q;
Uint32 sum = 0;
for (Uint32 i = 1; i <= 5; i++)
{
q.enqueue(new Alarm(i));
sum += i;
}
assert(Sum(q) == sum);
// Test removing from the middle:
Message* m = q.findByKey(3);
assert(m != 0);
q.remove(m);
assert(Sum(q) == sum - 3);
assert(q.getCount() == 4);
// Test removing from the front:
q.remove(q.front());
assert(Sum(q) == sum - 3 - 1);
assert(q.getCount() == 3);
// Test removing from the front:
q.remove(q.back());
assert(Sum(q) == sum - 3 - 1 - 5);
assert(q.getCount() == 2);
// Test dequeue:
m = q.dequeue();
assert(m->getKey() == 2);
assert(Sum(q) == sum - 3 - 1 - 5 - 2);
assert(q.getCount() == 1);
// Test dequeue:
m = q.dequeue();
assert(m->getKey() == 4);
assert(Sum(q) == sum - 3 - 1 - 5 - 2 - 4);
assert(q.getCount() == 0);
}
示例9: sendResponsePull
//.........这里部分代码省略.........
// uri encode the error (for the http header) only when it is
// non-chunking or the first error with chunking
if (isChunkRequest == false ||
(isChunkRequest == true && isFirst == true))
{
String msg =
TraceableCIMException(cimException).getDescription();
String uriEncodedMsg = XmlWriter::encodeURICharacters(msg);
CIMException cimExceptionUri(
cimException.getCode(), uriEncodedMsg);
cimExceptionUri.setContentLanguages(
cimException.getContentLanguages());
cimException = cimExceptionUri;
}
} // if first error in response stream
// never put the error in chunked response (because it will end up in
// the trailer), so just use the non-error response formatter to send
// more data
if (isChunkRequest == true)
{
message = formatResponse(
cimName,
messageId,
httpMethod,
contentLanguage,
bodyParamsBuf,
body,
serverTime,
isFirst,
isLast);
}
}
else
{
// else non-error condition
try
{
message = formatResponse(
cimName,
messageId,
httpMethod,
contentLanguage,
bodyParamsBuf,
body,
serverTime,
isFirst,
isLast);
}
catch (PEGASUS_STD(bad_alloc)&)
{
MessageLoaderParms parms(
"Server.CIMOperationResponseEncoder.OUT_OF_MEMORY",
"A System error has occurred. Please retry the CIM Operation "
"at a later time.");
Logger::put_l(
Logger::ERROR_LOG, System::CIMSERVER, Logger::WARNING,
parms);
cimException = PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, parms);
// try again with new error and no body
body.clear();
sendResponse(response, name, isImplicit);
PEG_METHOD_EXIT();
return;
}
STAT_BYTESSENT
}
AutoPtr<HTTPMessage> httpMessage(
new HTTPMessage(message, 0, &cimException));
httpMessage->setComplete(isLast);
httpMessage->setIndex(messageIndex);
httpMessage->binaryResponse = response->binaryResponse;
if (cimException.getCode() != CIM_ERR_SUCCESS)
{
httpMessage->contentLanguages = cimException.getContentLanguages();
}
else
{
const OperationContext::Container& container =
response->operationContext.get(ContentLanguageListContainer::NAME);
const ContentLanguageListContainer& listContainer =
*dynamic_cast<const ContentLanguageListContainer*>(&container);
contentLanguage = listContainer.getLanguages();
httpMessage->contentLanguages = contentLanguage;
}
httpMessage->setCloseConnect(closeConnect);
queue->enqueue(httpMessage.release());
PEG_METHOD_EXIT();
}
示例10: test01
// Test Thread, MessageQueue, and Condition
int test01()
{
MessageQueue * mq = new MessageQueue("testQueue", true);
parmdef * parm[4];
for (int i = 0; i < 4;i++)
{
parm[i] = new parmdef();
parm[i]->mq = mq;
}
parm[0]->first = 0;
parm[0]->second = 1;
parm[0]->count = 20;
parm[3]->first = 4;
parm[3]->second = 6;
parm[3]->count = 10;
parm[0]->th = new Thread(fibonacci,parm[0],false);
parm[1]->th = new Thread(deq,parm[1],false);
parm[2]->th = new Thread(deq,parm[2],false);
parm[3]->th = new Thread(fibonacci,parm[3],false);
for (int i = 0; i < 4;i++)
{
parm[i]->cond_start->lock_object(pegasus_thread_self());
parm[i]->th->run();
}
// Let the thread start and wait for Start Condition to be signaled
for (int i = 0; i < 4;i++)
{
parm[i]->cond_start->unlocked_wait( pegasus_thread_self() );
parm[i]->cond_start->unlock_object( );
}
// all fired up successfully
// Finish the enqueueing tasks
parm[0]->th->join();
parm[3]->th->join();
// Tell one of the dequeueing tasks to finish
Message * message;
message = new Message(MY_CANCEL_TYPE,0);
mq->enqueue(message);
// Tell the other dequeueing task to finish
message = new Message(MY_CANCEL_TYPE,0);
mq->enqueue(message);
// Finish the dequeueing tasks
parm[1]->th->join();
parm[2]->th->join();
// Clean up
for (int i = 0; i < 4; i++)
{
delete parm[i]->th;
delete parm[i];
}
delete mq;
return 0;
}
示例11: Message
int IPACM_EvtDispatcher::PostEvt
(
ipacm_cmd_q_data *data
)
{
Message *item = NULL;
MessageQueue *MsgQueue = NULL;
if(data->event < IPA_EXTERNAL_EVENT_MAX)
{
IPACMDBG("Insert event into external queue.\n");
MsgQueue = MessageQueue::getInstanceExternal();
}
else
{
IPACMDBG("Insert event into internal queue.\n");
MsgQueue = MessageQueue::getInstanceInternal();
}
if(MsgQueue == NULL)
{
IPACMERR("unable to retrieve MsgQueue instance\n");
return IPACM_FAILURE;
}
item = new Message();
if(item == NULL)
{
IPACMERR("unable to create new message item\n");
return IPACM_FAILURE;
}
item->evt.callback_ptr = IPACM_EvtDispatcher::ProcessEvt;
memcpy(&item->evt.data, data, sizeof(ipacm_cmd_q_data));
if(pthread_mutex_lock(&mutex) != 0)
{
IPACMERR("unable to lock the mutex\n");
return IPACM_FAILURE;
}
IPACMDBG("Enqueing item\n");
MsgQueue->enqueue(item);
IPACMDBG("Enqueued item %p\n", item);
if(pthread_cond_signal(&cond_var) != 0)
{
IPACMDBG("unable to lock the mutex\n");
/* Release the mutex before you return failure */
if(pthread_mutex_unlock(&mutex) != 0)
{
IPACMERR("unable to unlock the mutex\n");
return IPACM_FAILURE;
}
return IPACM_FAILURE;
}
if(pthread_mutex_unlock(&mutex) != 0)
{
IPACMERR("unable to unlock the mutex\n");
return IPACM_FAILURE;
}
return IPACM_SUCCESS;
}