小编Iro*_*ave的帖子

如何用C++限制循环中的FPS?

我正在尝试使用带有计时和线程的C++来限制执行交叉检查的循环中的每秒帧数.

这是我的代码:

std::chrono::system_clock::time_point now = std::chrono::system_clock::now();
std::chrono::system_clock::time_point lastFrame = std::chrono::system_clock::now();

while (true)
{
    // Maintain designated frequency of 5 Hz (200 ms per frame)
    now = std::chrono::system_clock::now();
    std::chrono::duration<double, std::milli> delta = now - lastFrame;
    lastFrame = now;

    if (delta.count() < 200.0)
    {
        std::chrono::duration<double, std::milli> delta_ms(200.0 - delta.count());
        auto delta_ms_duration = std::chrono::duration_cast<std::chrono::milliseconds>(delta_ms);
        std::this_thread::sleep_for(std::chrono::milliseconds(delta_ms_duration.count()));
    }

    printf("Time: %f \n", delta.count());

    // Perform intersection test

}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是delta的每个其他输出显示的是微不足道的数量,而不是我想要的~200 ms /帧:

Time: 199.253200
Time: 2.067700
Time: 199.420400
Time: 2.408100
Time: 199.494200
Time: 2.306200
Time: 199.586800
Time: …
Run Code Online (Sandbox Code Playgroud)

c++ c++-chrono

23
推荐指数
3
解决办法
5893
查看次数

功能终止时访问冲突 - 为什么会发生这种情况?

一旦loadInventoryData函数终止,我的程序就会一直以访问冲突错误终止:

CIS2252编程Project.exe中0x0F9BCCC8(msvcp110d.dll)的未处理异常:0xC0000005:访问冲突读取位置0x007DD314.

调用堆栈:

msvcp110d.dll!std::_Container_base12::_Orphan_all() Line 216    C++
CIS2252 Programming Project.exe!std::_String_alloc<0,std::_String_base_types<char,std::allocator<char> > >::_Free_proxy() Line 680  C++
CIS2252 Programming Project.exe!std::_String_alloc<0,std::_String_base_types<char,std::allocator<char> > >::~_String_alloc<0,std::_String_base_types<char,std::allocator<char> > >() Line 656   C++
CIS2252 Programming Project.exe!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::~basic_string<char,std::char_traits<char>,std::allocator<char> >() Line 965   C++
CIS2252 Programming Project.exe!loadInventoryData(std::vector<InventoryItem,std::allocator<InventoryItem> > & invMast) Line 220 C++
CIS2252 Programming Project.exe!main() Line 45  C++
CIS2252 Programming Project.exe!__tmainCRTStartup() Line 536    C
CIS2252 Programming Project.exe!mainCRTStartup() Line 377   C
Run Code Online (Sandbox Code Playgroud)

它终止的代码部分是:

void loadInventoryData(vector<InventoryItem> &invMast)
{
    // Loads invmast.dat or creates one if none exists
    fstream invFile;
    invFile.open("invmast.dat", ios::in | ios::binary); …
Run Code Online (Sandbox Code Playgroud)

c++ visual-c++

1
推荐指数
1
解决办法
1466
查看次数

Python范围 - start == end时没有迭代?

正如标题所说.

测试使用:

for x in range (0,0):
        print(str(x))
Run Code Online (Sandbox Code Playgroud)

我期待看到"0",但没有打印.

我正在使用Python 3并且希望:

 for x in range(x,y)
Run Code Online (Sandbox Code Playgroud)

当x == y时,至少会给我一次迭代,但似乎情况并非如此......是否有更好的方法可以做到这一点而不是手动处理x == y场景?

python python-3.x

0
推荐指数
1
解决办法
64
查看次数

标签 统计

c++ ×2

c++-chrono ×1

python ×1

python-3.x ×1

visual-c++ ×1