当前位置: 技术问答>linux和unix
GTK网络编程界面老是卡住
来源: 互联网 发布时间:2016-02-28
本文导语: 我想编一个网络五子棋的游戏,已经能通信; 但是程序有时能正常运行;有时运行一会,其中一个客户端界面就被卡住; 又有时刚打开客户端还行,一连接到服务器就卡了。 我用了多线程。 哪位高手知道怎么回事...
我想编一个网络五子棋的游戏,已经能通信;
但是程序有时能正常运行;有时运行一会,其中一个客户端界面就被卡住;
又有时刚打开客户端还行,一连接到服务器就卡了。
我用了多线程。
哪位高手知道怎么回事,能帮忙解决一下,谢谢!
但是程序有时能正常运行;有时运行一会,其中一个客户端界面就被卡住;
又有时刚打开客户端还行,一连接到服务器就卡了。
我用了多线程。
哪位高手知道怎么回事,能帮忙解决一下,谢谢!
|
g_signal_connect(G_OBJECT(button),"clicked",
G_CALLBACK(on_begain),NULL);
你在这里回调 on_begain,而每次在on_begain里面都会创建线程,这样是不对的,这个线程只要在主函数
里面创建一次就可以了。
我的建议是,在主函数里面就创建一个等待接受对方棋子信息的线程,而不是每次按键都去创建一个线程。
人机对弈没有问题,大概是棋子传送时间很短,感觉不出来,但是网络传输总有延迟,这个时候,你的线程好像没有
起到作用,就是cpu都去处理接受棋子信息,而不去画图了
G_CALLBACK(on_begain),NULL);
你在这里回调 on_begain,而每次在on_begain里面都会创建线程,这样是不对的,这个线程只要在主函数
里面创建一次就可以了。
我的建议是,在主函数里面就创建一个等待接受对方棋子信息的线程,而不是每次按键都去创建一个线程。
人机对弈没有问题,大概是棋子传送时间很短,感觉不出来,但是网络传输总有延迟,这个时候,你的线程好像没有
起到作用,就是cpu都去处理接受棋子信息,而不去画图了
|
没看你的代码,提点建议不知是否有用:
计算(也就是死循环)不要跟界面(通常是主线程)在同一个线程。
GUI接受用户操作指令,然后发消息给后台的计算线程,然后等候后台线程的计算结果,线程间可以用条件变量同步。
计算(也就是死循环)不要跟界面(通常是主线程)在同一个线程。
GUI接受用户操作指令,然后发消息给后台的计算线程,然后等候后台线程的计算结果,线程间可以用条件变量同步。
|
是不是程序里有死循环啊?
|
线程里面使用了sleep 吗
|
1.程序太长,你说用了多线程,但是我没有看到你调用 pthread_create去创建线程。
2。线程里面 在画图之前调用 gdk_threads_enter(); 画完调用 gdk_threads_leave();
3.usleep(500);时间太短
2。线程里面 在画图之前调用 gdk_threads_enter(); 画完调用 gdk_threads_leave();
3.usleep(500);时间太短
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。