#include "qt_pdu_msgq.h" #include #include #include #include qt_pdu_msgq::qt_pdu_msgq(QObject *parent) : QObject(parent) { /* // 尝试清理旧队列 int msgid = msgget(key, 0666); if (msgid != -1) { struct msqid_ds buf; if (msgctl(msgid, IPC_STAT, &buf) == 0) { if (buf.msg_qnum > 0) { qWarning() << "Cleaning" << buf.msg_qnum << "stale messages"; while(msgrcv(msgid, nullptr, 0, 0, IPC_NOWAIT) != -1); } msgctl(msgid, IPC_RMID, nullptr); } } */ // 创建新队列 // qDebug()<<"MSG INIT SUCCESS msgid"< 0) { //emit newMessageReceived(msg.CtrlType, msg.nValue); }else { usleep(100000); // 100ms轮询 } } } void qt_pdu_msgq::sendResponse(MsgData* pMSGData) { if(!pMSGData) { return; } const char* path = "/root/run/app/smartPDU_MSGQ"; QFile::setPermissions(path, QFile::ReadOwner|QFile::WriteOwner|QFile::ReadGroup|QFile::WriteGroup|QFile::ReadOther|QFile::WriteOther); key_t key = ftok(path, 'Q'); if (key == -1) { qCritical() << "ftok failed:" << strerror(errno); return; } msgid = msgget(key, 0666 | IPC_CREAT); if (msgid == -1) { qCritical() << "msgget failed:" << strerror(errno); return; } MsgData msg; msg=*pMSGData; msg.MsgType=1; qDebug()<<"MSGType="<