QT 生成唯一的随机码

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);

设置随机数的种子为当前时间毫秒数,一般来讲,每次运行时,其随机数的种子都不相同,因此生成的随机数不尽相同。但是,和当前所说的那样,如果在不同的线程中同时生产随机码,毫秒数一致的时候,随机数种子相同,生成的随机码就会相同。

相处一种办法,设置随机数种子时,可以利用局部变量的地址作为随机数的种子,这样的话,不管这么运行,随机数的种子都会不同。

这只是一种方法,抛砖引玉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

巧笑笑笑倩兮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值