我在使用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. Jquery中的prop()方法 全选或全不选

    注意: prop()在高版本才会有效, 低版本用attr(); $(function(){ // 元素checkbox var aChecked = $('.checkGoods'); // 全选 v ...

  2. C# 展开和折叠代码的快捷键(总结)

    C# 展开和折叠代码的快捷键 VS2005代码编辑器的展开和折叠代码确实很方便和实用.以下是展开代码和折叠代码所用到的快捷键,很常用: Ctrl + M + O: 折叠所有方法 Ctrl + M +  ...

  3. hdu 2068

    ps:长度长到我不想说....WA了无数次...25的阶乘就爆炸... 代码: #include "stdio.h" #define LL long long LL fac(lon ...

  4. 极客DIY:如何构建一台属于自己的基站

    写在前面(原文作者) 上周我去特拉维夫(Tel Aviv)探望我的朋友结果有了一些收获,一块崭新的BladeRF(x40),即一个支持USB3.0的SDR平台,这就意味着可以同时发送和接收信息了.而H ...

  5. Varnost slovenskih GSM omrežij III

    V torek smo pisali tudi o tem, da Si.Mobil v svojem omrežju dovoli uporabo A5/0 (nešifriranega preno ...

  6. 算法(第4版)-1.1.7 API

    总结:本小姐讲述了API的定义.作用以及一些Java库的举例. 重点: 1.API的目的是将调用和实现分离:除了API中给出的信息,调用者不需要知道实现的其他细节,而实现也不应考虑特殊的应用场景.

  7. UIkit框架之UIbutton的使用

    1.UIbutton的继承关系:UIcontroller:UIview:UIresponder:NSObject: 2.添加按钮的步骤: (1)创建按钮的时候首先设置类型 (2)添加标题或者图片,设置 ...

  8. Net作业调度-----Quartz.Net

    一:业务需求: 项目需要在不同时刻,执行一个或很多个不同的作业. Windows执行计划这时并不能很好的满足需求了,迫切需要一个更为强大,方便管理,集群部署的作业调度框架. 二:介绍 Quartz一个 ...

  9. App Store审核指南:WatchKit、HealthKit、ApplePay以及HomeKit部分

    将此前App Store审核指南中的WatchKit.HealthKit.ApplePay以及HomeKit部分进行了整理和摘取. 10. 用户界面 10.1 应用程序必须遵守苹果的<Apple ...

  10. Request的参数信息

    Request.ServerVariables["Url"] 返回服务器地址 Request.ServerVariables["Path_Info"] 客户端提 ...