c++ 控制可更改的真实的循环长度

nvbavucw  于 2023-01-28  发布在  其他
关注(0)|答案(1)|浏览(98)

我有一个循环,从0到5000,然后重置为0并重复。然后有另一个循环,为第一个循环的每次重置创建一个"步骤"。有16个步骤,一旦第二个循环到达终点,它重置为0。

counter = 0;
    pattern = 0;
    tempo = 5000;

    counter++;
        if (counter > tempo) {
            
            counter = 0;
            if(pattern==16) {
                pattern=0;
            }
            
              pattern++;
        }

问题是循环的时间长度仅仅是数字'5000',这不是一个真正的时间值。如果5000增加,循环时间会更长,如果5000减少,当然相反。
我需要一种通过以毫秒/秒为单位的真实时间值来控制速度循环长度的方法。
这一点很重要,因为它是一个音乐节目,16步循环需要由时间控制
我试过用

sleep(x)

但这不起作用,并崩溃了我的程序后,每一次尝试。

enxuqcxy

enxuqcxy1#

这似乎起作用了,但正如预期的那样,并不是超级准确(“日期;超时;日期”同时输入):

Mac_3.2.57$cat timer.cpp
// to compile: "g++ -std=c++11 helloWorld.cpp"
#include <iostream>
#include <unistd.h>
using namespace std;
int main() {
    int counter = 1;
    int pattern = 0;
    int tempo = 4;
    int tester = 0;
    int patternLimit = 6;

    while(1){
        usleep(1000000);
        cout << "w" << endl;
        if(counter == tempo) {
            cout << "x" << endl;
            counter = 0;
            pattern++;
        }
        if(pattern == patternLimit) {
            cout << "y to break" << endl;
            pattern=0;
            //continue;
            break;
        }
        counter++;
    }
}
Mac_3.2.57$g++ -std=c++11 timer.cpp
Mac_3.2.57$date
Mon Jan 23 10:35:48 EST 2023
Mac_3.2.57$time ./a.out
w
w
w
w
x
w
w
w
w
x
w
w
w
w
x
w
w
w
w
x
w
w
w
w
x
w
w
w
w
x
y to break

real    0m24.077s
user    0m0.002s
sys 0m0.004s
Mac_3.2.57$date
Mon Jan 23 10:36:12 EST 2023
Mac_3.2.57$

相关问题