0

我正在尝试在 Labwindows/CVI 中编写一个简单的 UDP 传输程序。这个想法是它创建了 2 个 UDP 通道,使用一个将数据写入端口,另一个用于接收数据并打印出来。

这是接收端:

//Called whenever data arrives on port

int CVICALLBACK udpCallback(unsigned channel, int eventType, int errCode, void *callbackData)
{
    printf("Callback called\n");  

    //Gets the data from port
    readChannel();

    return 0;
}

void createReadChannel()
{
    //Channel for given port, receiving from any IP address 
    CreateUDPChannelConfig(port, UDP_ANY_ADDRESS, 0, NULL, NULL, &readerChannel);  

    //Attach callback to channel (above)
    SetUDPAttribute(readerChannel, ATTR_UDP_CALLBACK, udpCallback);

    printf("Read channel created\n");
}

我的主要问题是,当我在调试模式下运行它时,从未调用显示的回调函数,即不打印“回调调用”,也不是在结果readChannel()调用中存储或打印任何数据。

但是,当作为 .exe 编译和执行时,它会按预期工作。每次在该端口上接收到数据时,回调都会执行。

会导致这种情况发生的调试版本和“发布”版本之间会有什么区别?

getchar()编辑:经过大量测试,我相信这与使用导致主线程挂起的函数等待消息有关。为什么它在发布模式下工作我不知道,但它可能与输出窗口(?)的差异有关。我的解决方案是删除回调并在它自己的线程上运行接收通道。这样线程总是在等待消息,使用:

UDPRead(readerChannel, 0, 0, UDP_WAIT_FOREVER, NULL, NULL)) < 0)

然后我的主线程可以根据需要接收消息。如果有人有任何其他信息,请告诉我。

4

0 回答 0