Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在执行循环(C+;+;)时设置一秒的间隔_C++ - Fatal编程技术网

C++ 如何在执行循环(C+;+;)时设置一秒的间隔

C++ 如何在执行循环(C+;+;)时设置一秒的间隔,c++,C++,事实上,我想做一个秒表。在这里,我创建了一个循环,每次循环执行时都增加一个名为seconds的整数的值。但它执行得太快了。因此,我希望循环在每秒钟之后执行。我读过一些关于时钟和时间的讨论,但我甚至不能清楚地理解。所以,我不能在我的代码中使用它。[这已经很久没有我开始学习C++了。所以,我仍然不理解高级的“事物”。 代码如下: int main() { int looper=2; int second=00; while (looper=2){ second++; co

事实上,我想做一个秒表。在这里,我创建了一个循环,每次循环执行时都增加一个名为seconds的整数的值。但它执行得太快了。因此,我希望循环在每秒钟之后执行。我读过一些关于时钟和时间的讨论,但我甚至不能清楚地理解。所以,我不能在我的代码中使用它。[这已经很久没有我开始学习C++了。所以,我仍然不理解高级的“事物”。 代码如下:

     int main()
{

int looper=2;
int second=00;
while (looper=2){
    second++;
    cout<<second<<endl;}
intmain()
{
int-looper=2;
整数秒=00;
while(活套=2){
第二++;
cout例如:

#include <stdio.h>
#include <windows.h>

void main()
{
    int iFullDelay = 1000;

    DWORD start = GetTickCount();
    #define TIMES_TO_POLL_PER_SECOND 20

    for (int i = 0; i < TIMES_TO_POLL_PER_SECOND; i++)
    {
        Sleep(iFullDelay / TIMES_TO_POLL_PER_SECOND);
        printf("%d ", i);
    }
    DWORD end = GetTickCount();

    printf("\r\n%d ms elapsed\r\n", end-start);
}

因此,实际上在1秒内,我们执行了20次某些操作-在本例中,printf.printf本身需要一些时间,这就是为什么1016毫秒会过去,而不是1000毫秒=1秒。因此,如果在循环中执行某些操作,则需要确保它不会消耗太多时间,或者以某种方式测量过去的时间。

此函数依赖于
要工作:

#include <ctime>

//function that waits the specified number of seconds
void wait(double seconds) {
    clock_t start = clock();

    while (double((clock() - start) / CLOCKS_PER_SEC) < seconds) {
        //keep looping until number of seconds have passed
    }

}
#包括
//等待指定秒数的函数
无效等待(双秒){
时钟启动=时钟();
while(双倍((clock()-start)/时钟每秒)<秒){
//继续循环,直到秒数过去
}
}
您可以使用或(
C++11
)来完成任务(在
中)。
包括时间的

int main()
{
    using namespace std::this_thread;
    using namespace std::chrono;

    vector<int> v { 1,2,3,4,5 };

    for (const auto& i : v) {
        cout << i << '\n';
        sleep_for(seconds(1));
        // or sleep_until(system_clock::now() + seconds(1));
    }
}

您使用的是什么平台?您可以使用操作系统获取时间由于for循环和
printf
实际需要时间,这将随时间推移而漂移。当然。但这取决于您希望漂移的程度-可能可以接受0.01%的漂移。但如果不是,则使用getTickCount并减少剩余时间。简单的数学-不是吗?结束=GetTickCount();if(end-start>1000)printf(“时间已过。返回”);首先,最好是正确的,因为这是一个简单的数学问题。你问我你不了解API的工作原理-我给你添加了一个示例应用程序。如果不完全了解你想做什么,函数本身就无法编写。在我的示例printf执行中,也可能需要internity—例如,如果我选择某个对象在控制台窗口中-然后执行该函数是不可接受的,然后您需要使用多线程。所以实现取决于您想要实现什么。请参阅下面我的评论
int main()
{
    using namespace std::this_thread;
    using namespace std::chrono;

    vector<int> v { 1,2,3,4,5 };

    for (const auto& i : v) {
        cout << i << '\n';
        sleep_for(seconds(1));
        // or sleep_until(system_clock::now() + seconds(1));
    }
}
sleep_for(1s);