【问题标题】:Execute something after a certain waiting time specified in the code in C++?在 C++ 代码中指定的特定等待时间后执行某些操作?
【发布时间】:2012-03-15 05:08:50
【问题描述】:

我正在尝试用 C++ 制作一个基本的蛇游戏,我用 orl[x] 和 ory[y] 数组制作了一个基本网格,现在我正在尝试添加蛇。

基本上我希望蛇一直移动,直到按下某个键并一次移动一个数组。我尝试使用计时器以外的其他东西,但它会立即执行。我需要一个计时器,让蛇每秒钟都这样做,直到按下一个键。如果你玩过蛇,你就会明白我的意思。

我需要在 C++ 中创建一个计时器,但我不想通过创建一个计时器来实现一个庞大的代码,并且不了解我自己的代码中的任何内容。我希望它尽可能简单。

知道我该怎么做吗?我查看了时间头库,但没有发现任何有用的东西。

【问题讨论】:

  • 您使用的是什么操作系统?相关问题:你是如何在屏幕上画蛇的?
  • 您可以轻松地将ctime 用于许多简单的计时器类。
  • 你不 make 计时器.. 从纯 c/c++ 的角度来看,这甚至是不可能的。你必须使用一些系统 API/syscall/...
  • 我使用的是 windows 和 @yi_H,请详细解释一下。如果计时器是不可能的,请告诉我一个移动蛇的替代品
  • @Dave:你必须经常检查时间。主动等待是个坏主意。

标签: c++ time timer


【解决方案1】:

可悲的事实是,标准 C++ 并不真正支持这种行为。 Windows 和 Posix 都支持允许您执行此操作的睡眠功能。对于更高级别的解决方案,您可以查看 Boost::Threads。

【讨论】:

  • 还有usleepselect
  • 大多数专业人士还没有使用 C++11,但如果你这样做了,那么无论如何。
【解决方案2】:

如果你在linux上,你可以使用“time.h”
这是一个等待几秒钟的快速功能。
如果您愿意,可以将其修改几毫秒。
另外,你在使用 ncurses 库吗?

#include <iostream>
#include <cstdlib>
#include <time.h>

void SleepForNumberOfSeconds(const int & numberofSeconds);

int main(){

    std::cout << "waiting a second.." << std::endl;
    SleepForNumberOfSeconds(1);
    std::cout << "BOOM!" << std::endl;

    std::cout << "waiting 5 seconds.." << std::endl;
    SleepForNumberOfSeconds(5);
    std::cout << "AH YEAH!" << std::endl;

    return EXIT_SUCCESS;
}

void SleepForNumberOfSeconds(const int & numberofSeconds){

    timespec delay = {numberofSeconds,0}; //500,000 = 1/2 milliseconds
    timespec delayrem;

    nanosleep(&delay, &delayrem);

    return;
}
【解决方案3】:

如果您使用的是 Windows,请查看SetWaitableTimer windows api 调用。 我现在无法提供示例,因为我现在正在使用 iPad,但它可以满足您的需求。

祝你好运!

【讨论】:

    【解决方案4】:

    我正在添加这个答案,因为目前没有 C++11 答案。

    您可以使用std::this_thread::sleep_for 进行独立于平台的等待

    void millisecond_wait( unsigned ms )
    {
        std::chrono::milliseconds dura( ms );
        std::this_thread::sleep_for( dura );
    }
    

    【讨论】:

      猜你喜欢
      • 2015-11-13
      • 2022-11-03
      • 1970-01-01
      • 1970-01-01
      • 2013-01-17
      • 2012-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多