C ++睡眠功能并不像预期的那样工作

时间:2015-01-19 07:25:12

标签: c++ visual-c++ sleep

我首先在窗口上绘制polygon,然后在一秒后删除polygon并绘制circle。 我为它编写了这段代码:

#include <Simple_window.h>
#include <Graph.h>

using namespace Graph_lib;

//------------------------------------------------------------------------------
int main() {
    Simple_window win(Point(100,100),600,400,"lines");

    Graph_lib::Polygon poly;
    Circle c(Point(100,150), 50);

    poly.add(Point(100,100));
    poly.add(Point(150,150));
    poly.add(Point(50,100));
    win.attach(poly);
    Sleep(1000);
    win.detach(poly);
    win.attach(c);
    win.wait_for_button();
    return 0;
}

但它在实践中并没有以这种方式发生。事实上,系统只需等待一秒钟,只显示circle (c)polygon (poly)将不会显示!

如何解决问题?

1 个答案:

答案 0 :(得分:2)

主要内部的呼叫睡眠功能将冻结应用程序,并重新刷新/刷新。

要做你需要的东西,你必须使用计时器或用作计时器的线程来放置代码和管理延迟。

计时器事件中的代码可能就像这样

主要内部的呼叫睡眠功能将冻结应用程序,并重新刷新/刷新。

要做你需要的东西,你必须使用计时器或用作计时器的线程来放置代码和管理延迟。

你的计时器事件中的代码可能是这样的,我知道代码根本不正确,它是一条痕迹。

Graph_lib::Polygon poly;
Circle c;

void OnTimerEvent()
{
      win.detach(poly);
      win.attach(c);
}

int main()
{
    c(Point(100,150), 50);
    poly.add(Point(100,100));
    poly.add(Point(150,150));
    poly.add(Point(50,100));
    win.attach(poly);

    timer.interval = 1000;
    timer.enabled = true;

    win.wait_for_button();
}

我的意思是你必须启动一个计时器,该事件将在1秒后被调用,并可以完成你的工作。