我正在编写一个程序,它根据系统的内部时钟生成一个随机数,这样我就不需要种子或第一个值。第一个值必须从内部时钟中提取,方法是将年份、月、日、小时、分钟、秒转换为毫秒,并将它们加到当前毫秒中,以获得唯一的数字(时间标记)。用C语言获取这些值有帮助吗?
发布于 2014-03-29 12:38:34
您可以使用clock_gettime()或gettimeofday() --或者,如果您处于非常贫困的环境中,则可以使用ftime()或time()。确保您使用了足够大的数据类型来保存毫米时间。
对于clock_gettime(),结果是一个包含tv_sec和tv_nsec元素的struct timespec。你会用:
#include <time.h>
#include <stdint.h>
struct timespec t;
clock_gettime(CLOCK_REALTIME, &t);
int64_t millitime = t.tv_sec * INT64_C(1000) + t.tv_nsec / 1000000;使用gettimeofday() (这是官方反对的,但更广泛地可用-例如,Mac有gettimeofday()但没有clock_gettime()),您有一个带有tv_sec和tv_usec成员的struct timeval。
#include <sys/time.h>
#include <stdint.h>
struct timeval t;
gettimeofday(&t, 0);
int64_t millitime = t.tv_sec * INT64_C(1000) + t.tv_usec / 1000;(请注意,ftime()在较早版本的POSIX中是标准的,但不再是POSIX的一部分,尽管有些系统仍然提供向后兼容性。它在Unix的早期版本中作为第一个次-秒级工具提供,但并不早于第7版Unix。为了向后兼容,它被添加到POSIX (单Unix规范)中,但是如果可以的话应该使用clock_gettime(),如果不能的话应该使用gettimeofday() )。
发布于 2014-03-29 12:39:09
标准C不能保证时间精度优于一秒钟。如果您使用的是POSIX系统,请尝试函数。
发布于 2014-03-29 12:45:53
如果您碰巧在Windows中执行此操作,则可以使用:
unsigned int rand = GetTickCount() % A_PRIME_NUMBER_FOR_EXAMPLE;编辑:强调一些适合你的环境的东西
https://stackoverflow.com/questions/22731173
复制相似问题