Tôi đã kết hợp thành công hàm UDPreceive vào ứng dụng của mình. TUY NHIÊN! Tôi không thể tìm ra cách để ngăn chặn người nghe UDP chạy vô hạn. Thư viện OSCPack có một Break() và AsynchronousBreak() được tích hợp vào nó, nhưng tôi đã không thể thực hiện chúng.C++ Làm gián đoạn Trình nghe UDP. Biên dịch bằng oscpack trong Xcode
trong file udpSocket.cpp trong oscpack:
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);
}
}
nỗ lực của tôi để gọi Break() từ lớp Listener gói không xuất hiện để làm gì cả, mặc dù trình biên dịch cho thấy rằng tất cả mọi thứ được gọi chính xác :
SocketReceiveMultiplexer s;
s.Break();
Một phương pháp khác mà tôi đã thử là tăng cờ ngắt theo hàm RunUntilSigInt(). Trong lớp người nghe gói:
raise(SIGINT);
nhưng điều này chấm dứt toàn bộ chương trình, thay vì chỉ phá vỡ từ UDPListener. Để tham khảo, đây là RunUntilSigInt() mã trong udpSocket.cpp:
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;
}
Tôi hoàn toàn bị mắc kẹt trên một này, bất kỳ sự giúp đỡ/lời khuyên sẽ được đánh giá rất nhiều.
Cảm ơn, Tom
Gửi datagram 'dừng' cục bộ? –
@MartinJames, cảm ơn vì điều đó, một cái gì đó như thế này? http://stackoverflow.com/questions/4670664/interrupt-a-thread-in-datagramsocket-receive –