考虑下面的示例代码(作为示例,我快速输入它,如果有错误也没关系 - 我对理论感兴趣)。
bool shutDown = false; //global
int main()
{
CreateThread(NULL, 0, &MessengerLoop, NULL, 0, NULL);
//do other programmy stuff...
}
DWORD WINAPI MessengerLoop( LPVOID lpParam )
{
zmq::context_t context(1);
zmq::socket_t socket (context, ZMQ_SUB);
socket.connect("tcp://localhost:5556");
socket.setsockopt(ZMQ_SUBSCRIBE, "10001 ", 6);
while(!shutDown)
{
zmq_msg_t getMessage;
zmq_msg_init(&getMessage);
zmq_msg_recv (&getMessage, socket, 0); //This line will wait forever for a message
processMessage(getMessage);
}
}
创建一个线程来等待传入的消息并适当地处理它们。线程正在循环,直到shutDown
设置为 true。
在 ZeroMQ 中,指南明确说明了必须清理的内容,即消息、套接字和上下文。
我的问题是:由于recv
将永远等待消息,阻塞线程,如果从未收到消息,我该如何安全地关闭该线程?