获得比秒更低的价值

时间:2014-03-29 22:46:33

标签: c++ random time

我知道time(0)会在几秒钟内返回,但有没有办法让它返回较小的值?我认为它们被称为毫秒,但不确定。我需要将其传递给srand()

原因是我让2个线程相互通信,但它们通信速度如此之快,以至于它们每次发送30个相同的消息,我需要那些随机数是不同的,所以不同的种子每个“毫秒”

5 个答案:

答案 0 :(得分:2)

似乎您的错误是您尝试不止一次致电srand()

有关详细说明,请参阅此问题:srand() -- why call only once?

答案 1 :(得分:0)

假设您使用的是符合POSIX标准的环境,则可以使用gettimeofday

struct timeval tv;
suseconds_t microseconds;

gettimeofday(tv, NULL);

microseconds = tv.tv_usec;

答案 2 :(得分:0)

您所询问的完全取决于系统。在过去,大多数系统都在几毫秒内完成时间。例如,VMS操作系统使用8字节时间,以毫秒为增量。

当Unix变得流行时,图书馆开始使用秒来跟随它。

如上所述,您可以在posix上获得毫秒数。 Apple也有NSDate和CACurrentMediaTime。 Windoze有GetTickCount和其他一些人。

答案 3 :(得分:0)

如果您需要两个线程使用伪随机数进行通信,则应使用两个独立的流,每个流仅使用不同的随机种子播种一次。有许多C / C ++库可以做到这一点,但使用标准的C rand / srand并不是其中之一。即使您只正确调用srand()一次,在两个线程中使用相同的随机流也会导致可预测(即非随机)行为。

使用更好的生成器,并使用一些真实的系统随机性 - 在真实计算机上使用/ dev / random,在Windows上使用CryptGenRandom。

答案 4 :(得分:-1)

这没有标准的C / C ++功能。但通常OS提供这样的功能。

Linux中有函数gettimeofday。 Windows上有GetSystemTime功能。

http://linux.die.net/man/2/gettimeofday http://msdn.microsoft.com/en-us/library/windows/desktop/ms724390(v=vs.85).aspx

也许还有其他一些功能......