Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.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++;与Java nanotime()相比,给出了不同的值_Java_C++ - Fatal编程技术网

为什么时钟用C++;与Java nanotime()相比,给出了不同的值

为什么时钟用C++;与Java nanotime()相比,给出了不同的值,java,c++,Java,C++,所以我有一段旧代码,我在Java游戏中实现跳转时使用它 它看起来像这样: //Vars final int Y_ZERO_POINT = 580; double height = 0, speed = 4; public static final double gravity = 9.81; double x = 25; int y = (int) (Y_ZERO_POINT-(height*100)); long previous, start = 0; // Code in my game

所以我有一段旧代码,我在Java游戏中实现跳转时使用它

它看起来像这样:

//Vars
final int Y_ZERO_POINT = 580;
double height = 0, speed = 4;
public static final double gravity = 9.81;
double x = 25;
int y = (int) (Y_ZERO_POINT-(height*100));
long previous, start = 0;

// Code in my game loop
        start = System.nanoTime();

        if(previous != 0 && up){
            double delta = start - previous;
            height = (height + (delta/1000000000) * speed);        
            speed -= (delta/1000000000)  * gravity;
            y = (int) (Y_ZERO_POINT-(height * 100));

        }
        previous = start;
现在我想在C++游戏中实现类似的东西。 在这里阅读: 我了解到Java
System.getNanoTime()
使用
clock\u gettime(clock\u MONOTONIC,&ts)在Linux系统中

<>我在C++代码中使用了它,实现了相同的跳转代码:

差别是巨大的。在Java中,跳转始终是一致的,并以应有的方式结束。在我的C++程序中,跳转有时就像java一样,但大部分都会发生根本性的变化。我从
clock\u gettime()
获得的时间有时会跳跃很多,这导致游戏中的跳跃本身看起来也非常随机。角色有时可以跳出屏幕,然后下一次正常跳转


是否有可能从C++函数中得到一致的结果,就像java一样,或者我应该考虑使用不同的方法来跳转吗?< /p> < p>如果你有C++ 11编译器,你可以使用便携头。 []


对于时差测量,确保使用不可调(又称单调)的时钟。更多信息。

核心问题是,您只需查看电视屏幕上的秒数字段。您还需要将其与tv_sec字段相结合。但是推荐的解决方案是使用@865719,就像一个符咒!非常感谢。
#include <iostream>
#include <chrono>
using namespace std;

int main()
{
    auto t0 = chrono::steady_clock::now();
    auto t1 = chrono::steady_clock::now();
    auto dt = t1 - t0;

    cout << "t0: " << chrono::time_point_cast<chrono::nanoseconds>(t0).time_since_epoch().count() << " ns" << endl;
    cout << "t1: " << chrono::time_point_cast<chrono::nanoseconds>(t1).time_since_epoch().count() << " ns" << endl;
    cout << "dt: " << chrono::duration_cast<chrono::nanoseconds>(dt).count() << " ns" << endl;

    return 0;
}
t0: 2800906746162 ns
t1: 2800906746345 ns
dt: 183 ns