Windows'ta değilseniz veya C++ uygulamasında çapraz platform olan bir şey uyguluyorsanız, ACE kitaplıklarındaki Kuyruğu kullanmayı deneyin. kuyruktan almak için
ACE_NEW_RETURN (mb,
ACE_Message_Block (rb.size(),
ACE_Message_Block::MB_DATA,
0,
buffer),
0);
mb->msg_priority (ACE_Utils::truncate_cast<unsigned long> (rb.size()));
mb->wr_ptr (rb.size());
ACE_DEBUG ((LM_DEBUG,
"enqueueing message of size %d\n",
mb->msg_priority()));
// Enqueue in priority order.
if (msg_queue->enqueue_prio (mb) == -1)
ACE_ERROR ((LM_ERROR, "(%t) %p\n", "put_next"));
:
ACE_Message_Queue<ACE_MT_SYNCH> *msg_queue;
ACE kütüphane örneklerinden numune olarak, Sonra sıraya mesajı koyarak için kullanabilirsiniz
ACE_Message_Block *mb = 0;
msg_queue->dequeue_head (mb) == -1;
int length = ACE_Utils::truncate_cast<int> (mb->length());
if (length > 0)
ACE_OS::puts (mb->rd_ptr());
// Free up the buffer memory and the Message_Block.
ACE_Allocator::instance()->free (mb->rd_ptr());
mb->release();
avantajı ise Çok fazla kod yazmak zorunda kalmadan senkronizasyonu ilkel olarak kolayca değiştirebilir. Win32 veya posix ile çalışıyorsunuz
? Küçük pseudocode örneğimi temizlememe yardımcı olur. – Nate