2012-09-12 87 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