我想拨打一个电话 - 要么是函数调用,要么是在一段时间内做某些条件......通常是10到20秒。
我会在一段时间内得到一些用户输入并且这样做......
在Linux / Unix系统上使用的正确功能是什么?
gettimeofday似乎是要走的路......或者也许time_t time(time_t * t)......看起来很简单。什么是首选?
答案 0 :(得分:3)
你想要的是这样吗?这将在接下来的20秒内重复调用myfunc()。因此可以进行1次调用(如果myfunc至少运行20秒)或数百次调用(myfunc()需要几毫秒才能完成):
#include <time.h>
void myfunc()
{
/* do something */
}
int main()
{
time_t start = time(NULL);
time_t now = time(NULL);
while ((now - start) <= 20) {
myfunc();
time_t now = time(NULL);
}
}
可能值得问一下你最终想要实现的目标。如果这是用于分析(例如,函数f执行所花费的平均时间量),那么您可能希望查看其他解决方案 - 例如,使用gcc为您提供的内置分析(使用“ -pg“选项”,并用gprof进行分析。
答案 1 :(得分:0)
这可以这样做
#include <ctime>
/*
your function here
*/
int main()
{
double TimeToRunInSecs = ...;
clock_t c = clock();
while(double(clock()-c)/CLOCKS_PER_SEC < TimeToRunInSecs)
{
myFunc();
}
}
标准clock()函数返回进程启动时的SOMETHING数。在一秒钟内有CLOCK_PER_SEC SOMETHINGs:)
HTH
答案 2 :(得分:0)
我可以做一个
time_t current_time = time(0);
并衡量一下......但是有一种首选方式......主要是这是一种最佳实践问题....
X
答案 3 :(得分:0)
一些事情......
如果你想确保函数需要时间X来完成,不管函数中的实际代码花了多长时间,做这样的事情(高度伪代码)
class Delay
{
public:
Delay(long long delay) : _delay(delay) // in microseconds
{
::gettimeofday(_start, NULL); // grab the start time...
}
~Delay()
{
struct timeval end;
::gettimeofday(end, NULL); // grab the end time
long long ts = _start.tv_sec * 1000000 + _start.tv_usec;
long long tse = end.tv_sec * 1000000 + end.tv_usec;
long long diff = tse - ts;
if (diff < _delay)
{
// need to sleep for the difference...
// do this using select;
// construct a struct timeval (same as required for gettimeofday)
fd_set rfds;
struct timeval tv;
int retval;
FD_ZERO(&rfds);
diff = _delay - diff; // calculate the time to sleep
tv.tv_sec = diff / 1000000;
tv.tv_usec = diff % 1000000;
retval = select(0, &rfds, NULL, NULL, &tv);
// should only get here when this times out...
}
}
private:
struct timeval _start;
};
然后在函数顶部定义一个Delay类的实例来延迟 - 应该做的诀窍......(这段代码未经测试,可能有bug,我只是输入它给你一个想法.. )