void setRandString(QString & randString)
{
int max = 32;
QString tmp = QString("0123456789abcdefghijklmnopqrstuvwxyz");
QString str = QString();
QTime t;
t = QTime::currentTime();
qsrand(t.msec() + t.second() * 1000);
for (int i = 0; i < max; i++)
{
int ir = qrand() % tmp.length();
str[i] = tmp.at(ir);
}
randString = str;
}
2019-1-23
开发中发现,如果开了线程,在不同的线程中同时生产随机码,生成的随机码可能一样。这是因为这句代码引起的:
qsrand(t.msec() + t.second() * 1000);
设置随机数的种子为当前时间毫秒数,一般来讲,每次运行时,其随机数的种子都不相同,因此生成的随机数不尽相同。但是,和当前所说的那样,如果在不同的线程中同时生产随机码,毫秒数一致的时候,随机数种子相同,生成的随机码就会相同。
相处一种办法,设置随机数种子时,可以利用局部变量的地址作为随机数的种子,这样的话,不管这么运行,随机数的种子都会不同。
这只是一种方法,抛砖引玉。