22 Mart 2018 Perşembe

interprocess message_queue Sınıfı

Giriş
Şu satırı dahil ederiz.
#include <boost/interprocess/ipc/message_queue.hpp>
Bu sınıf thred safe bir nesnedir.
Constructor
Yazan taraf için şöyle yaparız. En fazla 4 byte büyüklüğünde ve 100 tane mesaj alabilen bir kuyruk yaratır.
bi::message_queue mq (bi::create_only,"messagequeue",100,4);
Okuyan taraf için şöyle yaparız.
bi::message_queue mq (bi::open_only,"messagequeue");
Örnek
Şöyle yaparız.
bi::message_queue mq (bi::open_or_create,"messagequeue", 100, 4 );
Örnek
Şöyle yaparız.
//Create a message_queue.
message_queue mq
             (create_only               //only create
             ,"message_queue"           //name
             ,100                       //max message number
             ,sizeof(int)               //max message size
             );
receive metodu - int okuma
Kuyruk boşsa bloke olur. Eğer hata oluşursa interprocess_exception fırlatılır. Şöyle yaparız.
unsigned int priority;
message_queue::size_type recvd_size;

int number;
bi::mq.receive (&number, sizeof(number), recvd_size, priority);
if (recvd_size != sizeof(number)) {
  ...
}
receive metodu - string okuma
Şöyle yaparız.
unsigned int priority;
bi::message_queue::size_type recvd_size;

std::string msg;
msg.resize (100);
bi::mq.receive (msg.data(), 100, recvd_size, priority);
remove metodu
Şöyle yaparız.
bi::message_queue::remove ("messagequeue");
send metodu - int yazma
Kuyrukta doluysa bloke olur. Eğer hata oluşursa interprocess_exception fırlatılır. İskeleti şöyledir.
try{
  mq.send(...,..., 0);
  ...
}
catch (bi::interprocess_exception &ex){
  ...
}
Şöyle yaparız. Üçüncü parametre priority değeridir.
int i = ...;
bi::mq.send (&i, sizeof(i), 0);
send metodu - string yazma
Şöyle yaparız.
std::string msg = ...;
bi::mq.send (msg.data(), msg.size(), 0);



Hiç yorum yok:

Yorum Gönder