#include <stdlib.h> #include <errno.h> #include <iostream> #include <sys/time.h> using namespace std; int main() { int iRandNum = -1; const int iRandBeg = 0; const int iRandEnd = 9999; struct timeval ts; struct tm* pstTimeInfo; char szTimeBuf[16] = {0}; char szUniqId[20] ={0}; /* gettimeofday(&ts, NULL); cout << ts.tv_sec << endl; cout << time(0) << endl; 注意:该值time(0)返回秒数和ts.tv_sec结果一样。 */ for(int i=0;i<10000;i++) { gettimeofday(&ts,NULL); pstTimeInfo = localtime((time_t *) &ts.tv_sec); strftime(szTimeBuf ,sizeof(szTimeBuf), "%Y%m%d%H%M%S", pstTimeInfo); //以秒数作为seed生成的随机数效果比较差,重复比较多 //srand((unsigned int) time(0)); //gen rand num,这里以微秒作为seed,效果相对好一点, //但也存在冲突 srand((unsigned int) ts.tv_usec); iRandNum = iRandBeg + (int)((float)(iRandEnd-iRandBeg)*rand()/(RAND_MAX+1.0)); snprintf(szUniqId, sizeof(szUniqId), "%s%04d", szTimeBuf, iRandNum); cout << szUniqId << endl; //usleep(100); } //end of for }
测试的数据如下: