我在使用python的过程当中发现了这个有这样的错误,后来看了下面这篇文档才知道原因所在。

最近在编写一个局域网的聊天工具,在编写客户端时,我把界面部分和事件处理函数写好后,准备再开一个线程用于接收服务器端发来的数据报,根据数据报的类型来调用相应的子模块。我用的是gtk+写的界面,由于两个线程都涉及到界面的问题,并且我并没有考虑同步的问题,所以导致了标题中所说的问题。
我的数据接收模块(单独的一个线程)的大致内容如下:

while ( RecvInfo(datagram, &size_datagram) ){

/* 提取报文头 */
    struct ConnProto *ptr = (struct ConnProto *)pData;
    pconn = *ptr;

if (pconn.type == 0) {
        // 当前登录成功,下载用户列表
    }else if (pconn.type == -1) {
        // 当前用户已登录,先下线

        gchar str[100] = "系统提示:[当前用户已登录,请先下线]";
        message_box(str, GTK_MESSAGE_ERROR);

}else if (pconn.type == -2) {
        // 当前用户不存在,先注册
    }else if (pconn.type == -3) {
        // 当前用户密码错误
    }else if (pconn.type == 10) {
        // 有新用户上线
    }else if (pconn.type == 11) {
        // 注册成功
    }else if (pconn.type == -11) {
        // 当前用户已存在
    }else if (pconn.type ==2) {
        // 私聊处理
    }else if (pconn.type == 3) {
        // 群聊处理
    }else if (pconn.type == 4) {
        // 退出处理
    }else {
        // 其他处理
        gchar str[100] = "系统提示:[当前有不识别的命令]";
        message_box(str, GTK_MESSAGE_ERROR);
    }
}

其中,message_box ()函数涉及到界面的问题,就是一个消息框的界面。刚开始的时候,while循环中没有放置sleep()函数(你可能会有疑问为什么放置这个函数,其实我的接收数据的函数RecvInfo () 函数还没有写,我只是用一个空函数代替,所以如果不放置sleep ()的话,循环速度就会太快),出现的问题如下:

chat: Fatal IO error 11 (资源暂时不可用) on X server :0.0.

当在 while ()循环中加入 sleep (2)时,出现的问题如下:

The program 'chat' received an X Window System error.
This probably reflects a bug in the program.
The error was 'BadIDChoice (invalid resource ID chosen for this connection)'.
(Details: serial 761 error_code 14 request_code 144 minor_code 2)
(Note to programmers: normally, X errors are reported asynchronously;
that is, you will receive the error a while after causing it.
To debug your program, run it with the --sync command line
option to change this behavior. You can then get a meaningful
backtrace from your debugger if you break on the gdk_x_error() function.)

在网上搜了一下,说是由于两个线程抢占GUI资源导致的,去除其中一个线程中的控件句柄,说白了就是只能有一个线程来画界面。
实际上,在gtk+程序中使用线程的话,不能直接使用 linux 中的 pthread 了,而应该用 gtk+ 中提供的线程函数。关于 gtk+ 中使用多线程的方法,详见另一篇文章。

出现Fatal IO error 11 (资源暂时不可用) on X server :0.0.的可能原因及解决方案的更多相关文章

  1. 在VMware8.0.4安装centos6.3出现蓝屏,显示“anaconda: Fatal IO error 104 (Connection reset by peer) on X server :1.0. install exited abnormally [1/1]”?

    解决方案:在创建虚拟机时选择“自定义(高级)”,然后点击“下一步”,在弹出的对话框中,在硬件兼容性该项选择 Workstation6.5-7.x.如果创建虚拟机时选择“标准”,默认的硬件兼容性将是Wo ...

  2. Ubuntu 解决E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)

    今天想在ubuntu上配置nodejs的环境.结果用apt install安装软件时出现报错. $ sudo apt-get update 会得到下面错误提示: E: 无法获得锁 /var/lib/a ...

  3. 解决问题E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) E: 无法锁定管理目录,

    在用sudo apt-get install kmymoney2安装软件kmymoney2时,由于速度太慢,想换个软件源,直接关闭了终端,apt-get但进程没有结束,结果终端提示:“E: 无法获得锁 ...

  4. 【Linux/Ubuntu学习 7】E: 无法获得锁 /var/lib/dpkg/lock – open (11: 资源暂时不可用) E: 无法锁定管理目录

    在用sudo apt-get install 安装软件时,由于速度太慢,想换个软件源,直接关闭了终端,apt-get但进程没有结束,结果终端提示 :“E: 无法获得锁 /var/lib/dpkg/lo ...

  5. [转]Ubuntu中无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)

    sudo apt-get install git E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) E: 无法锁定管理目录(/var/lib/dpkg/ ...

  6. ubuntu 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)

    在用sudo apt-get install kmymoney2安装软件kmymoney2时,由于速度太慢,想换个软件源,直接关闭了终端,apt-get但进程没有结束,结果终端提示:"E: ...

  7. [解决问题] E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)

    E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它? 解决办法: 1.终端输 ...

  8. E: 无法获得锁 /var/lib/apt/lists/lock - open (11: 资源暂时不可用)

    1 错误描述 youhaidong@youhaidong:~$ sudo apt-get update E: 无法获得锁 /var/lib/apt/lists/lock - open (11: 资源暂 ...

  9. 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) ubuntu 安装vim 及遇到的错误处理

    今天,处理完问题,闲来无事,打算在虚拟机中的Ubuntu中练习shell脚本编写. 无奈,虚拟机系统所装的只有vi,这个编辑软件对于我们来说还是比较不习惯的,所以打算安装vim.好了,闲言少叙. 安装 ...

随机推荐

  1. iOS定时器NSTimer的使用方法

    1.初始化 + (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelect ...

  2. DP重新学

    白书上的DP讲义:一 二 DAG上的dp 不要好高骛远去学这种高端东西,学了也写不对,剩下的几天把基本的dp和搜索搞下,就圆满了.不要再学新算法了,去九度把现有的算法写个痛. 学了数位DP和记忆搜索, ...

  3. 使用struts2的<s>标签出错

    15:org.apache.struts2.views.jsp.ActionTag 16:JSP 17:18:19:executeResult Server: Resin/3.1.4a Content ...

  4. python3爬虫再探之EXCEL

    在爬取数据之后,数据的保存就成为一个新的问题,一般不太大的的数据存储到EXCEL就可以了.这里介绍一个python的第三方库——xlsxwriter. 这个库的安装就不介绍了,pip就可以,不用FQ. ...

  5. 前序/中序--->后序

    参考:http://www.cnblogs.com/rain-lei/p/3576796.html !!由前序和后序序列无法确定二叉树 preOrder 5 3 2 4 8 6 9   midOrde ...

  6. 【LeetCode】Best Time to Buy and Sell Stock IV

    Best Time to Buy and Sell Stock IV Say you have an array for which the ith element is the price of a ...

  7. vim1

    Vim模式介绍 几乎所有的编辑器都会有插入和执行命令两种模式,并且大多数的编辑器使用了与Vim接入不同的方式:命令目录(鼠标或者键盘驱动),组合键(CTRL和ALT组成)或鼠标输入.Vim和vi一样, ...

  8. iOS ARC和MRC混编

    如果一个工程为MRC,其中需要添加ARC的文件: 选择target  ->  build phases  ->  compile sources  ->单击ARC的文件将compil ...

  9. POJ3237 (树链剖分+线段树)

    Problem Tree (POJ3237) 题目大意 给定一颗树,有边权. 要求支持三种操作: 操作一:更改某条边的权值. 操作二:将某条路径上的边权取反. 操作三:询问某条路径上的最大权值. 解题 ...

  10. WCF之多个协定

    多个协定”示例演示如何在一个服务上实现多个协定,以及如何配置终结点以便与实现的每个协定进行通信 1.服务端代码如下(服务实现了两个协定,增加了黄色所示代码): class Program { stat ...