在我的代码中添加延迟,无法正常工作。 C ++

时间:2015-05-23 11:06:08

标签: windows winforms c++-cli delay

试图让西蒙说游戏作为我的学期项目,问题是我不能在颜色变化时添加颜色之间的延迟, 即我想添加一个延迟,以便当一个盒子颜色改变时,然后大约3~4秒后下一个盒子的颜色改变,但问题是当我把Sleep()放入我的for循环中时,系统暂停对于作为一个整体给出的金额,然后显示同时改变的所有颜色不是一个一个 ....

任何帮助,这是我点击游戏开始按钮时调用的功能。怎么解决?

void flash()
    {
        srand(time(NULL));

        int x;
        for (int i = 5; i > 0;i--)
        {
            x = rand() % 4;

            if (x == 0)
            {
                button1->BackColor = System::Drawing::Color::Blue;
            }
            else if (x == 1)
            {
                button2->BackColor = System::Drawing::Color::Blue;
            }
            else    if (x == 2)
            {
                button3->BackColor = System::Drawing::Color::Blue;
            }
            else    if (x == 3)
            {
                button4->BackColor = System::Drawing::Color::Blue;
            }
            Sleep(500);
        }
    }

P.s我试图将睡眠置于if语句中,但这也不起作用,请帮忙吗?

1 个答案:

答案 0 :(得分:0)

由于您的代码是单线程的,并且您正在循环中更新按钮的颜色,因此(当前)应用程序的标准绘图例程无法启动,直到循环结束。如果你想在循环中进行重绘,你必须通过(例如):

手动发出它
$(':hidden').filter(function(){
      return $(this).width()!=0 && $(this).height()!=0;
});

请注意,如果您长时间停留在循环中,Windows会识别出您的应用程序没有响应Windows消息并将其呈现为“无响应”#34; (窗口褪色为半白色)。为了避免这种情况,您可以使用System :: Windows :: Forms中的Timer类来实现延迟行为。