本文主要是介绍Gtk-WARNING **:gtk_disable_setlocale() must be called befor,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Gtk-WARNING **:gtk_disable_setlocale() must be called befor
我搜索了一下产生原因,是由于QT窗口系统与Opencv中的imshow产生的窗体冲突。imshow是需求,不能移除,那就只有考虑不使用QT窗口系统。其实我也不想和QT窗口系统扯上关系,主要是涉及到的QUdpSocket通信,详情可以查看《QUdpSocket通信简易实例》。这个其中的信号(signal)必须搭配值槽函数使用,而槽函数就是QT窗口系统中的,要定义槽函数,必须继承QObject,所以貌似要使用QUdpSocket就必须要和QT窗口系统扯上关系。所以我使用了替代方案:libhv,
Like libevent, libev, and libuv, libhv provides event-loop with non-blocking IO and timer, but simpler api and richer protocols.
#include "UdpServer.h"
using namespace hv;int main() {int port = atoi("8179");UdpServer srv;int bindfd = srv.createsocket(port);if (bindfd < 0) {return -20;}printf("server bind on port %d, bindfd=%d ...\n", port, bindfd);srv.onMessage = [](const SocketChannelPtr& channel, Buffer* buf) {printf("< %.*s\n", (int)buf->size(), (char*)buf->data());std::string result = stitchController((char*)buf->data());//不太明白这段代码有什么用,但是执行完这段代码就会触发下面的onWriteComplete 回调函数channel->write(result.data());};srv.onWriteComplete = [](const SocketChannelPtr& channel, Buffer* buf) {printf("> %.*s\n", (int)buf->size(), (char*)buf->data());//channel->send((char*)buf->data());};srv.start();while (1) sleep(1);return 0;
}
上述代码就能实现对于Udp消息的监听,一收到消息,就会触发onMessage 回调函数,可以在里面填写自己的业务代码。最开始我以为这段代码回复Udp消息,最后,我发现自己是想多了。想要知道如何回复Udp消息,可以转到我上一篇博客的Sender
这篇关于Gtk-WARNING **:gtk_disable_setlocale() must be called befor的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!