Qt 多进程通信之消息队列
来源:互联网 发布:平果笔记本屏幕软件 编辑:程序博客网 时间:2024/06/05 05:58
服务端:
#include <fcntl.h> /* For O_* constants */#include <sys/stat.h> /* For mode constants */#include <mqueue.h>#include <unistd.h>#include <syslog.h>#define MQNAME "/fifo1"mqd_t m_mq;//message queue objectbool bExitThread = false;//exit thread conditionpthread_t g_thread;//thread objectvoid* Process(void* args){ while(true){ if(bExitThread){ break; } char cData[1024] = {"123"}; int nSend = mq_send(m_mq, cData, strlen(cData), 0);//nonblock if(errno == EAGAIN){ syslog(LOG_DEBUG, "EAGAIN"); } if(errno == EBADF){ syslog(LOG_DEBUG, "EBADF"); } if(errno == EINTR){ syslog(LOG_DEBUG, "EINTR"); } if(errno == EINVAL){ syslog(LOG_DEBUG, "EINVAL"); } if(errno == EMSGSIZE){ syslog(LOG_DEBUG, "EMSGSIZE"); } if(errno == ETIMEDOUT){ syslog(LOG_DEBUG, "ETIMEDOUT"); } usleep(1000 * 1000);//sleep one second }}MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); m_mq = mq_open(MQNAME, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH, NULL); mq_attr m_attr; mq_getattr(m_mq, &m_attr);// get attribute from mq m_attr.mq_flags |= O_NONBLOCK; mq_setattr(m_mq, &m_attr, NULL);//set nonblock pthread_create(&g_thread, NULL, Process, this);//start thread}MainWindow::~MainWindow(){ bExitThread = true;//break-thread signal pthread_join(g_thread, NULL); //wait thread exit mq_close(m_mq); //close mq object mq_unlink(MQNAME);//delete mq from kernel delete ui;}
客户端:
#include <fcntl.h> /* For O_* constants */#include <sys/stat.h> /* For mode constants */#include <mqueue.h>#include <unistd.h>#include <syslog.h>#define MQNAME "/fifo1"mqd_t m_mq;bool bExitThread = false;pthread_t g_thread;void* Process(void* args){ while(true){ if(bExitThread){ break; } char cData[8192] = {0}; ssize_t nRecv = mq_receive(m_mq, cData, 8192, 0); if(errno == EAGAIN){ syslog(LOG_DEBUG, "EAGAIN"); } if(errno == EBADF){ syslog(LOG_DEBUG, "EBADF"); } if(errno == EINTR){ syslog(LOG_DEBUG, "EINTR"); } if(errno == EINVAL){ syslog(LOG_DEBUG, "EINVAL"); } if(errno == EMSGSIZE){ syslog(LOG_DEBUG, "EMSGSIZE"); } if(errno == ETIMEDOUT){ syslog(LOG_DEBUG, "ETIMEDOUT"); } usleep(1000 * 1000); }}MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); m_mq = mq_open(MQNAME, O_RDWR | O_CREAT, S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH, NULL); pthread_create(&g_thread, NULL, Process, this);}MainWindow::~MainWindow(){ bExitThread = true; pthread_join(g_thread, NULL); mq_close(m_mq); mq_unlink(MQNAME); delete ui;}
阅读全文
0 0
- Qt 多进程通信之消息队列
- 多进程通信之消息队列
- 多进程通信之消息队列
- 进程通信之消息队列
- 进程通信之消息队列
- 进程通信之 消息队列
- 进程通信之消息队列
- 进程通信之消息队列
- 进程通信之消息队列
- 进程通信之消息队列
- 【进程通信】之消息队列
- 进程通信之消息队列
- 进程间通信之消息队列通信
- linux进程间通信之消息队列
- 进程间通信之消息队列篇
- linux进程间通信之消息队列
- 进程间通信之消息队列
- linux进程间通信之消息队列
- HDU 1425 sort(桶排序+哈希函数)
- HDU1052 Tian Ji -- The Horse Racing(贪心)
- “抗洪救灾,你我同行”中国法治诗书画十人展在汪国新北京诗书画院举行
- Google QUIC协议:从TCP到UDP的Web平台
- hpu暑假训练 B
- Qt 多进程通信之消息队列
- word2vec【1】
- 11.2常用类(Arrays类,Bigdecimal类,BigInteger类,System类,Calendar类,Date类,Math类,Random类,正则表达式)
- 框架学习系列 mybatis 第九篇 mybatis中Mapper代理的开发方式
- tomcat通过conf-Catalina-localhost目录发布项目详解
- 电商品牌侵权的表现有哪些呢?
- GridView和ListView禁止滑动
- MySQL性能分析及explain的使用
- 简单实现短信验证码的倒计时效果