'da oscpack kullanılarak derlenmiştir Uygulamamda bir UDPreceive işlevini başarıyla dahil ettim. ANCAK! UDP dinleyicisinin sonsuza kadar çalışmasını nasıl durduracağımı anlayamıyorum. OSCPack kitaplığı içinde yerleşik bir Break() ve AsynchronousBreak() vardır, ancak bunları uygulayamadım. oscpack içinde udpSocket.cpp dosyasında C++ UDP Dinleyicisi'ni Durdurma. Xcode
: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);
}
}
her şey doğru şekilde çağrıldığını ileri süren derleyici rağmen bir şey yapmak görünmüyor paket Dinleyici sınıfından Sonu'nu() çağırmak için My girişimi :
SocketReceiveMultiplexer s;
s.Break();
denedim diğer bir yöntem RunUntilSigInt() işlevi ile uygun olarak, bir kesme bayrağının oldu.
raise(SIGINT);
ama bu yerine sadece UDPListener kopuş daha bütün program sona erer: paket dinleyici sınıfı içinde.
Ben tamamen bu sefer mahsur kaldımvoid 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;
}
, herhangi bir yardım/tavsiye büyük takdir edilecektir: Referans olarak aşağıda udpSocket.cpp içinde RunUntilSigInt() kodudur.
sayesinde aptal soru için üzgünüm Tom
Yerel olarak 'stop' datagramı gönderilsin mi? –
@MartinJames, bunun için teşekkürler, böyle bir şey? http://stackoverflow.com/questions/4670664/interrupt-a-thread-in-datagramsocket-receive –