我正在开发一个通过 UDP 在主机程序和 iPad 之间发送 OSC 数据的应用程序。从 iPad 发送到主机程序相当简单。但是,在 iPad 上接收主机程序的数据就比较麻烦了。
我已经到了 iPad 正在接收数据,但卡在 .run() 数据包侦听器函数中的地步。我的理解是 .break() 会中断函数并返回到我的主程序,但它似乎不起作用。
我在 iOS 环境中使用 Objective-c 的经验更丰富,所以可能是我对 C++ 的初步理解让我失望了。
下面的代码:(我一直在使用 oscPack 库来生成此代码。可在此处获得:http ://www.rossbencina.com/code/oscpack )
在我的主要功能中(break() 点似乎不起作用):
ExamplePacketListener listener;
UdpListeningReceiveSocket s(
IpEndpointName( IpEndpointName::ANY_ADDRESS, RECEIVEPORT ),
&listener );
s.RunUntilSigInt();
//s.Run();
s.Break();
s.AsynchronousBreak();
我的数据包侦听器类,与 oscPack 示例非常相似。带有一些参数修改。这是我认为可能导致问题的另一个领域。如果我的 osc 消息没有正确填充,它会阻止 run() 函数返回吗?
class ExamplePacketListener : public osc::OscPacketListener {
protected:
virtual void ProcessMessage( const osc::ReceivedMessage& m,
const IpEndpointName& remoteEndpoint )
{
(void) remoteEndpoint; // suppress unused parameter warning
try{
// example of parsing single messages. osc::OsckPacketListener
// handles the bundle traversal.
if( std::strcmp( m.AddressPattern(), "/oscMasterSend" ) == 0 ){
// example #1 -- argument stream interface
osc::ReceivedMessageArgumentStream args = m.ArgumentStream();
bool a1;
args >> a1 >> osc::EndMessage;
NSLog(@"%d",a1);
}
}
}
};
任何建议将不胜感激。
谢谢,汤姆。