0

我正在开发一个通过 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);

        }
    }
}
};

任何建议将不胜感激。

谢谢,汤姆。

4

0 回答 0