我已成功地将 UDPreceive 功能合并到我的应用程序中。然而!我不知道如何阻止 UDP 侦听器无限运行。OSCPack 库内置了 Break() 和 AsynchronousBreak(),但我无法实现这些。
在 oscpack 中的 udpSocket.cpp 文件中:
void Run() //the listener function (WORKING!)
{
break_ = false;
//UDP Listener Code
void Break()
{
break_ = true;
}
void AsynchronousBreak()
{
break_ = true;
// Send a termination message to the asynchronous break pipe, so select() will return
write( breakPipe_[1], "!", 1 );
}
}
我尝试从数据包侦听器类调用 Break() 似乎没有做任何事情,尽管编译器建议一切都被正确调用:
SocketReceiveMultiplexer s;
s.Break();
我尝试过的另一种方法是根据 RunUntilSigInt() 函数引发中断标志。在数据包侦听器类中:
raise(SIGINT);
但这会终止整个程序,而不仅仅是中断 UDPListener。作为参考,这里是 udpSocket.cpp 中的 RunUntilSigInt() 代码:
void SocketReceiveMultiplexer::RunUntilSigInt()
{
assert( multiplexerInstanceToAbortWithSigInt_ == 0 ); /* at present we support only one multiplexer instance running until sig int */
multiplexerInstanceToAbortWithSigInt_ = this;
signal( SIGINT, InterruptSignalHandler );
impl_->Run();
signal( SIGINT, SIG_DFL );
multiplexerInstanceToAbortWithSigInt_ = 0;
}
我完全坚持这一点,任何帮助/建议将不胜感激。
谢谢,汤姆