草庐IT

c++ - Windows sleep 不一致?

我使用opengl制作的游戏有点问题。游戏有时会半速运行,有时会正常运行。我不认为是opengl导致了问题,因为它在我的计算机上以14,000fps的速度运行。(即使以半速运行)这让我相信是“游戏计时器”导致了问题。游戏计时器在单独的线程上运行,并被编程为在其“循环”结束时通过Sleep(5)调用暂停。如果我删除Sleep(5)调用,它运行得如此之快以至于我几乎看不到屏幕上的Sprite。(可预测的行为)我尝试在Render()线程的末尾(也在它自己的线程上)抛出一个Sleep(16)。此操作应将fps限制在62左右。请记住,该应用程序有时以预期速度运行,有时以一半速度运行(我在我拥有

c++ - sleep_until() 的输入

根据对我的previousquestion的回答,我正在尝试使用sleep_until()但找不到告诉我如何在实际时间(例如1400:00h)中使用它的教程。有这样的例子:std::this_thread::sleep_until(system_clock::now()+seconds(10));,但我想要一些能让我指定时钟的东西时间。这应该是什么格式?我会很感激任何例子。 最佳答案 要等到指定的时钟时间,你需要得到一个代表那个时钟时间的time_t,然后使用std::chrono::system_clock::from_time_

c++ - 在 C++ 中模拟 CPU 负载

我目前正在使用C++在Windows中编写应用程序,我想模拟CPU负载。我有以下代码:voidtask1(void*param){unsignedelapsed=0;unsignedt0;while(1){if((t0=clock())>=50+elapsed){//iftimeelapsedis50mselapsed=t0;Sleep(50);}}}intmain(){intThreadNr;for(inti=0;i我使用与此线程中给出的答案相同的方法编写此代码:SimulatesteadyCPUloadandspikes我的问题是:我是否已将其他帖子中的C#代码正确地转换为C++?

c++ - 线程在等待锁定的互斥体时会休眠吗?

被std::mutex::lock()或条件变量阻塞的线程是否以释放内核供其他进程使用的方式休眠,或者我是否需要手动将这些线程置于sleep?如果为真,std::mutex::try_lock()是否会允许一种方法在不休眠的情况下旋转线程?我问的原因:我希望线程池中未使用的线程具有三种状态:自旋2毫秒,然后被互斥锁锁定250多毫秒(假设这让它们休眠并释放核心),然后最终被释放。如果可以的话,我想避免手动调用sleep,调整sleep持续时间会很困难。那么我可以安全地将它留给互斥量吗? 最佳答案 那是特定于实现的;C++标准不直接与它

C++11 std::this_thread::sleep_until() 在使用 GCC 4.8.5 编译时挂起

考虑以下程序:#include#includeintmain(){std::this_thread::sleep_until(std::chrono::steady_clock::now()-std::chrono::seconds(10));return0;}当用GCC4.8.5编译时,它会挂起。用GCC4.9及以上或clang3.4及以上编译时,立即返回,为什么会挂?据我了解,GCC4.8.5完全支持C++11标准。 最佳答案 这是一个已确认的错误,已在gcc4.9中修复。https://gcc.gnu.org/bugzilla

c++ - 我应该用 sleep_for 交换 usleep

我正处于使用gcc在Linux下将一些遗留C++代码升级到C++11的阶段。在尝试设置优先级时,我想到了以下问题。将对usleep的调用与对std::this_thread::sleep_for的调用交换是否有任何优势?在我谈论的代码中,正在运行的线程应该等待很短的时间。因此我不需要任何高级功能,例如中断sleep。 最佳答案 是的。std::this_thread::sleep_for由C++11标准指定,因此是任何具有C++11编译器和标准库的系统上的可移植解决方案。usleep由POSIX.1-2001指定(并宣布已过时!),

c++ - 多重继承的模糊解决方法?

我有一个名为animal的基类,以及继承自Animal的狗和猫。还有一个名为dogcat的多继承类,它继承自dog和cat,在Animal中,我有一种叫做sleep的方法。当我想从dogcat使用该方法时,出现错误“DogCat::sleep”不明确,我确实理解这个问题,但我在一本书中读到它应该是可能的,当你将sleep声明为虚拟时-但它不起作用。这不可能是书错了还是有什么解决方法?classAnimal{public:Animal(){}virtualvoidsleep(){coutsleep();//Error} 最佳答案 你有

c++ - 延迟执行1秒

所以我正在尝试编写一个简单的基于滴答的游戏。我在linux机器上用C++编写。下面的代码说明了我要完成的任务。for(unsignedinti=0;i嗯,这行不通。它似乎休眠了40秒,然后打印出函数调用的结果。我还尝试创建一个名为delay的新函数,它看起来像这样:voiddelay(intseconds){time_tstart,current;time(&start);do{time(¤t);}while((current-start)这里的结果相同。有人吗? 最佳答案 用一个具体的例子来重申别人已经说过的话:假设您

c++ - std::this_thread::sleep_for(2s) 中的 s 是什么?

我找到了std::this_thread::sleep_for可以处理时间单位s。std::this_thread::sleep_for(2s);但是我不知道2s中的s是什么。 最佳答案 Whatissinstd::this_thread::sleep_for(2s)?s是一个用户定义的文字使得2schrono::second类型的文字值.内置文字您可能熟悉integerliterals和floatingliterals;这些是内置后缀:+--------+---------+---------------+|Suffix|Exam

c++ - 空 while 循环不检查条件

在一个多线程C++程序中,我有一个在一个线程中运行的等价物:while(obj->member){}//waitingforobj->membertobesettofalseinanotherthread在另一个线程中,obj->member被设置为false。但是,即使将其设置为false,循环也不会中断。如果我将其更改为:while(obj->member){Sleep(1)}它按预期工作,当obj->member在另一个线程中设置为false时中断。为什么会这样? 最佳答案 尝试让成员volatile。这将强制它在每次使用时从