C++ 获取小于秒的值

C++ 获取小于秒的值,c++,random,time,C++,Random,Time,我知道time(0)将在几秒钟内返回,但有没有方法让它返回更小的值?我认为它们被称为毫秒,但不确定。我需要将其传递给srand() 原因是我让两个线程相互通信,但它们通信速度非常快,每秒钟它们会向彼此发送30条相同的消息,我需要这些随机数不同,所以每个“毫秒”都有一个不同的种子,你的错误似乎是你试图多次调用srand() 有关详细说明,请参见此问题:此问题没有标准的C/C++函数。但通常操作系统提供这样的功能 在Linux中,有一个函数gettimeofday。 在Windows上还有函数Get

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


原因是我让两个线程相互通信,但它们通信速度非常快,每秒钟它们会向彼此发送30条相同的消息,我需要这些随机数不同,所以每个“毫秒”都有一个不同的种子,你的错误似乎是你试图多次调用
srand()


有关详细说明,请参见此问题:

此问题没有标准的C/C++函数。但通常操作系统提供这样的功能

在Linux中,有一个函数gettimeofday。 在Windows上还有函数GetSystemTime


可能还有其他一些功能……

假设您在兼容POSIX的环境中,您可以使用


您所要求的完全取决于系统。在过去,大多数系统以毫秒为单位计算时间。例如,VMS操作系统使用8字节时间,增量为毫秒

当Unix变得流行时,库开始使用秒来跟随它

如上所述,您可以在posix上获得毫秒。 苹果也有NSDate和CACurrentMediaTime。
Windoze具有GetTickCount和其他一些功能。

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


使用更好的生成器,并为其添加一些真正的系统随机性——在真正的计算机上是/dev/random,在Windows上是CryptGenRandom。

您的编译器支持C++11吗?特别是库std::chrono with?不要多次调用
srand
。每次你这么做,你就有效地重置了随机发生器。啊,我明白了。我在同一秒钟内产生了大约30次相同的种子。
struct timeval tv;
suseconds_t microseconds;

gettimeofday(tv, NULL);

microseconds = tv.tv_usec;