C - 调试模式不会确认回调事件

时间:2016-03-15 16:59:52

标签: c events udp labwindows cvi

我试图在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)

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

0 个答案:

没有答案