Я успешно включил функцию UDPreceive в свое приложение. ОДНАКО! Я не могу понять, как остановить прослушиватель UDP из бесконечного запуска. Библиотека OSCPack имеет встроенные в нее функции Break() и AsynchronousBreak(), но я не смог их реализовать.C++ Прерывание прослушивателя UDP. Скомпилированный с использованием oscpack в Xcode
в файле udpSocket.cpp в 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);
}
}
Моя попытка вызова Break() из класса пакета Слушатель не появляется ничего делать, несмотря на компилятором предполагая, что все называют правильно :
SocketReceiveMultiplexer s;
s.Break();
Другой метод, который я попытался было поднять флаг прерывания в соответствии с функцией RunUntilSigInt(). В классе пакета слушатель:
raise(SIGINT);
, но это завершает всю программу, а не только разрыв с UDPListener. Для справки, здесь RunUntilSigInt (код) в 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;
}
я полностью застрял на этом, любая помощь/совет будет весьма признателен.
Спасибо, Том
Отправить «дейтаграмму« стоп »локально? –
@MartinJames, спасибо за это, что-то вроде этого? http://stackoverflow.com/questions/4670664/interrupt-a-thread-in-datagramsocket-receive –