c++ - linux C++ xlib,处理器速度快吗?

标签 c++ linux xlib

这对我来说听起来很棘手,实际上我正在使用 Xlib 来绘制一些窗口。一种用于在图像中绘制一些 2D 结果,因此仅在完成所有微积分后才绘制这一结果。另一个是一个简单的窗口,上面写着“计算中”。

  • 现在,在开始微积分之前,我会调用“向我显示简单窗口“微积分处理中””,
  • 然后我调用执行计算并绘制结果的函数,
  • 然后我调用“不要向我显示“正在计算的简单窗口””。

但是问题是,我在微积分过程中没有看到“显示简单窗口“微积分过程中””,我只是在一瞬间看到它,然后在显示微积分结果图像时就消失了。我尝试添加一些 sleep() 但这并不能解决问题。什么样的东西会导致这样的问题?我在 C++ 类(class)中已经遇到过这样的问题,当时我在控制台上工作,我从未找到此类问题的原因。

有人可以给我一些解释和提示,帮助我像老板一样处理它吗?

这是我的代码的一部分:

switch(e.type/*xlibevent*/){
      .
      .
      .
      case KeyRelease      :
        switch(keyRelease()){ // keyRelease just recognize wich key was released
            .
            .
            .       // w3w1 = window "calculus in process"
          case 3  : w3w1.switcher(); doCalculus(&w1); w3w1.switcher(); break;
            .
            .
            .
      .
      .
      .
        }

我刚刚做了一个测试,我将 doCalculus(&w1)sleep(3) 交换,结果相同,我没有看到我的窗口“正在处理微积分”

switcher() 已更正

  void switcher(){
    if(this->visible==0){
      XMapWindow(dpy,this->window); // what I though before : has to map the window 
                                    // what I think now : request to map the window
      XDrawString(dpy, this->window, this->gc, 10, 14, text.c_str(), text.length());
      XFlush(dpy); // dats what missed, not sure that efficient to flush the dpy
                   // but I deal with the part of xlib I know, I will check further
                   // about that
      visible=1;
    }else{
      XUnmapWindow(dpy,this->window);
      XFlush(dpy); //...
      visible=0;
    }

最佳答案

您的主事件循环可能被您的计算阻塞。因此,只要您忙于计算,就无法显示任何内容。如果在显示临时窗口后至少返回 X 事件循环一次,它应该会出现(尽管它可能无法正确刷新,因为它不会响应曝光事件)。最好的解决方案是在另一个线程中运行计算。

您对“为什么它不等待向我显示简单窗口”的困惑是基于对 X 客户端如何工作的误解。客户端和服务器之间的交互(甚至是做简单的事情)比您直观地预期的要多。

关于c++ - linux C++ xlib,处理器速度快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17034773/

相关文章:

c++ - 从一维数组中删除多次出现

c++ - 将二进制文件读取到 "unsigned char" vector 时的模板参数是什么

c++ - 主类中有多个派生类的重新定义错误

linux - 我想读取第一行值并从第二行值中减去它并继续直到结束

linux - 通过 shell 脚本退出或关闭 vim

c++ - 捕获 lambda 表达式中的非类型模板参数

php - 来自 pcntl_fork 的进程未终止

c - Windows 的库 "X11/Xlib.h"、 "X11/Xutil.h"、 "unistd.h"

python - 使用 python 和 xlib 编写合成窗口管理器

c++ - Xlib - 窗口未渲染