x86 gcc睡眠块还是旋转?
我如何制作一个C语言的sleep版本,这样它就可以使用cpu周期了?你需要什么吗x86 gcc睡眠块还是旋转?,c,multithreading,locking,x86,sleep,C,Multithreading,Locking,X86,Sleep,我如何制作一个C语言的sleep版本,这样它就可以使用cpu周期了?你需要什么吗 for (; ; ) ; ?您需要的不仅仅是 for (; ; ) ; ?我想类似(伪代码) while(时间
for (; ; ) ;
?您需要的不仅仅是
for (; ; ) ;
?我想类似(伪代码)
while(时间
“timewhile(时间
“timevoid Sleep\u自旋(DWORD毫秒)
{
大整数频率、目标、电流;
/*获取每秒的计数*/
如果(!QueryPerformanceFrequency(&freq)){/*句柄错误*/}
/*将目标设置为计数的毫秒数*/
target.QuadPart=freq.QuadPart*dw毫秒/1000;
/*获取当前计数*/
如果(!QueryPerformanceCounter(¤t)){/*句柄错误*/}
/*调整目标以获取结束计数*/
target.QuadPart+=当前的.QuadPart;
/*循环,直到计数超过目标*/
做
{
如果(!QueryPerformanceCounter(¤t)){/*句柄错误*/}
}而(current.QuadPart
在您的情况下使用适当的API,不管是什么。您要做的是循环,直到经过一定的时间。只需获取当前时间(使用可用的最高精度计时器)并循环,直到当前时间是启动后的特定时间量
下面是一个使用Windows API和使用两个相关函数的性能计数器的具体示例,以及
void Sleep\u自旋(DWORD毫秒)
{
大整数频率、目标、电流;
/*获取每秒的计数*/
如果(!QueryPerformanceFrequency(&freq)){/*句柄错误*/}
/*将目标设置为计数的毫秒数*/
target.QuadPart=freq.QuadPart*dw毫秒/1000;
/*获取当前计数*/
如果(!QueryPerformanceCounter(¤t)){/*句柄错误*/}
/*调整目标以获取结束计数*/
target.QuadPart+=当前的.QuadPart;
/*循环,直到计数超过目标*/
做
{
如果(!QueryPerformanceCounter(¤t)){/*句柄错误*/}
}而(current.QuadPart
在您的情况下使用适当的API,不管是什么。那么您的问题就是如何编写旋转的睡眠函数?是的,我如何使自定义睡眠函数旋转?那么您的问题就是如何编写旋转的睡眠函数?是的,我如何使自定义睡眠函数旋转,是的,它必须在给定的时间后返回。大概,是的,它必须在给定的时间后返回。
void Sleep_spin(DWORD dwMilliseconds)
{
LARGE_INTEGER freq, target, current;
/* get the counts per second */
if (!QueryPerformanceFrequency(&freq)) { /* handle error */ }
/* set target to dwMilliseconds worth of counts */
target.QuadPart = freq.QuadPart * dwMilliseconds / 1000;
/* get the current count */
if (!QueryPerformanceCounter(¤t)) { /* handle error */ }
/* adjust target to get the ending count */
target.QuadPart += current.QuadPart;
/* loop until the count exceeds the target */
do
{
if (!QueryPerformanceCounter(¤t)) { /* handle error */ }
} while (current.QuadPart < target.QuadPart);
}