2012-09-12 27 views
1

我一直在寻找下面代码的精确Win实现。我不是一个优秀的程序员,我的代码最初是在UNIX中,但我必须尽可能少地修改它。我从一些Google搜索中了解到,主要问题是没有Win等价物的“gettimeofday”。不管怎样,我想尽可能保留相同的程序结构。为Windows提供时间函数srand()

struct timeval tv; 
time_t curtime; 
gettimeofday(&tv, NULL); // ??? 
curtime = tv.tv_usec; 
srand(tv.tv_usec); //time(&curtime) 
+2

通常'srand(time(0))'就足够了,除非您希望每秒钟启动/停止多次程序,否则您并不需要亚秒级的分辨率来播种PRNG。 –

+0

将输出示例添加到该函数的控制台,就好像已经存在于windowze或您从Unicse运行的地方 – umlcat

+1

您是否清楚地理解此代码的作用?为什么?如果你只需要播种伪随机发生器,常用的方法是使用当前的UTC时间(以秒为单位):srand(time(NULL)),它在UNIX和Windows上均可使用。为什么你需要'tv.tv_usec',只需要几微秒的时间呢? – Rost

回答

1

如果您需要随机种子作为亚秒级的数字,做这样的事情:

#ifdef WIN32 
::srand(GetTickCount()); 
#else 
//your existing code 
#endif 
1

您可以使用Windows自带的功能GetSystemTimeAsFileTime(),以获得时间,写一个包装把它放在struct timeval结构中。

+0

谢谢,请确定,已经编辑我的评论。 – user2083050

相关问题