3.1.2 Thread and MessageQueue

 The following Writer class is an example to write data to POSIX message queue by using OZ++ Thread class.
Note:
1. Define your own C++ class (Writer) as a subclass of Thread class.
2. Add a member variable of MessageQueue class which can be used to send data to other process.
3. Define a contructor to initialize the above member variable.
4. Define a run method to send your data to other process through MessageQueue.
5. In main function, create an instance of your thread class(Writer), and call start and wait methods for the instance.





//
//MessageQueue.cpp
//Copyright (c) 2015  TOSHIYUKI ARAI. ALL RIGHTS RESERVED.

#include <oz++/Thread.h>
#include <oz++/MessageQueue.h>

namespace OZ {

class Writer :public Thread {
private:
  MessageQueue queue;

public:
  Writer(const char* qname)
  :Thread()
  {
    queue.create(qname);
  }

public:
  void run()
  {
    int i = 0;
    //You have to know the size of a message in your queue.
    const long int size = queue.messageSize();
    printf("Message Size:%ld\n", size); //Default size is 8192 bytes. 
    while(i < 100) {
      if (queue.isWritable()) {
                char message[size];
        sprintf(message, "Hello world %d", i);
        try {
          //You may specify the real message size 
          // to the second argument of the send method of 
          // MessageQueue.
          queue.send(message, strlen(message), 0);
          printf("Sent: %s\n", message);
          i++;
        } catch (Exception& ex) {
          ex.display();
        }
      } else {
        printf("Your message queue seems to be full\n");
        sleep(1);
      }
    } //while
  }
};
}

int main(int argc, char* argv[])
{
  const char* qname = "/oz++_queue";

  try {
    Writer writer(qname);
    writer.start();
    writer.wait();

  } catch (Exception& ex) {
    ex.display();
  }
  return 0;    
}



Last modified: 29 Aug 2016

 Last modified: 29 Aug2016

Copyright (c) 2000-2016 Antillia.com ALL RIGHTS RESERVED.