Tag: 消息队列

C – 使用队列在线程之间传递消息的问题

我正在尝试使用队列在两个线程之间传递消息,但到目前为止我还没有得到任何结果。 当我在收到邮件之后和邮件发送之前打印邮件内容时,它似乎只能保持其价值。 我需要用1个服务器线程和多个客户端线程来实现它,但是现在我只使用1个。 这是我的代码 struct msg //struct for client requests to server { long mtype; int numResources; //number of resources to be requested int ID; //ID associated with client thread }; int c1PID; //process ID variable for client thread 1 int serverPID; key_t key1; key_t keyS; int msqid1; int msqidS; int main(int arc, char *argv[]) […]

msgget()和mq_open之间的区别

我阅读了有关消息队列操作,如msgget(),msgsnd()和msgrcv()。 但是当我在堆栈溢出中搜索与消息队列相关的问题时,我才知道还有另一组消息队列操作,例如mq_open(),mq_send(),mq_receive()。 任何人都可以告诉我这两种类型的消息队列之间有什么区别,以及广泛使用哪种类型的消息队列?

使用POSIX消息队列而不是TCP套接字 – 如何建立“连接”?

我有客户端和服务器程序,现在通过TCP进行通信。 我正在尝试使用POSIX消息队列(当然,在客户端和服务器位于同一台机器上的情况下)。 我希望它能提高性能(特别是通过减少延迟)。 我已经解决了大部分问题,但我不确定一件事:如何建立“连接”。 服务器同时接受来自多个客户端的连接,所以我很想模仿TCP连接建立过程,如下所示: 服务器打开一个具有已知名称的队列并连续读取它(它可以像使用TCP一样使用select(2) )。 客户端打开三个队列:两个具有任意名称(包括一些唯一性,例如PID以避免冲突),以及一个具有服务器使用的已知名称的队列。 客户端向服务器的队列发送“连接”消息,包括客户端的队列名称(一个指定用于客户端到服务器的流量,另一个指定用于反向)。 服务器打开客户端连接消息中指定的队列,并开始从客户端到服务器读取(选择)。 客户端使用众所周知的名称关闭服务器队列。 使用客户端命名的两个队列(每个方向一个)进行双向通信。 您可能会看到此方案与常见的TCP方法类似,这并非偶然。 但是,我想知道: 你能想到更好的方法吗? 你看到我的方法有任何潜在的问题吗? 您是否有任何其他想法,包括在同一台计算机上使用消息队列而不是TCP实际上可以提高性能(延迟)的可能性? 请记住,之前我没有使用POSIX消息队列(我之前使用过IBM WebSphere MQ,但这有点不同)。 该平台是Linux。

确定窗口消息的优先级

有没有办法以编程方式检查其消息队列中窗口消息的优先级? 例如:已知某些窗口消息WM_PAINT和WM_TIMER具有最低优先级,并且位于具有最高优先级的消息之后。 我正在寻找一些可以确认两条消息中哪一条具有最低优先级或最高优先级或哪条消息将首先发送还是最后发送的消息?