我正在尝试使用带有计时和线程的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) 一旦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) 正如标题所说.
测试使用:
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场景?