在确定的时间内避免在ZMQ中进行缓冲

Avoid buffering in ZMQ for a determined time?

本文关键字:ZMQ 缓冲 时间      更新时间:2023-10-16

我们正在阅读在ZMQ中播放的Kinect的消息。

我们或多或少使用以下代码:

socket_t subscriber_eeg(context, ZMQ_SUB);
subscriber_eeg.connect("tcp://127.0.0.1:5559");
while(true)
{
Do Random stuff
if (pressedPause)
{
    //shows message
    continue;
}
subscriber.recv(&kinect_msg);
//code to process message
//code to plot the hand movements.
}

目标是在有人按下暂停键的给定事件上暂停代码的执行。暂停事件在线程上独立运行。

一切都很好,但问题是,由于ZMQ缓冲消息,它突然开始绘制在暂停状态下捕捉的每一个移动。

有没有办法告诉ZMQ在暂停的情况下停止接收消息,或者清除缓冲区?

只需切换连接状态:

subscriber.connect("tcp://127.0.0.1:5559");
//do work
//user presses 'Pause'
subscriber.disconnect("tcp://127.0.0.1:5559");
//user un-'Pauses'
subscriber.connect("tcp://127.0.0.1:5559");

我刚刚用单独的线程测试了这一点,当订阅者醒来时,它不会重新接收在断开连接状态下发送的消息。