我试图在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)
然后我的主线程可以根据需要接收消息。 如果有人有任何其他信息,请告诉我。