gpt4 book ai didi

c++ - linux C++ xlib,处理器会变快吗?

转载 作者:太空狗 更新时间:2023-10-29 12:18:48 26 4
gpt4 key购买 nike

这对我来说听起来有点棘手,实际上我正在使用 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;
.
.
.
.
.
.
}

我刚刚做了一个测试,我用 sleep(3) 交换了 doCalculus(&w1) 结果相同,我没有看到我的窗口“calculus in process”

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com