Multithreading Qt';s随机生成器和线程(qsrand和qrand)
我有一个应用程序,它使用线程池(Multithreading Qt';s随机生成器和线程(qsrand和qrand),multithreading,qt,random,Multithreading,Qt,Random,我有一个应用程序,它使用线程池(QThreadPool,自己的实例,即不是全局实例),并通过将任务提交到池的队列来运行一些任务(QRunnable)。 我的主要职能是: qsrand(QTime(0,0,0).secsTo(QTime::currentTime())); 我的任务使用随机数。然而,问题是,这些数字在应用程序的不同执行之间不是随机的。例如,如果我运行应用程序两次,我将看到与输出相同的随机数,而不是预期的不同数。 (当然,我在运行应用程序之间等待的时间超过一秒钟) 如果我将上面的语
QThreadPool
,自己的实例,即不是全局实例),并通过将任务提交到池的队列来运行一些任务(QRunnable
)。
我的主要职能是:
qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
我的任务使用随机数。然而,问题是,这些数字在应用程序的不同执行之间不是随机的。例如,如果我运行应用程序两次,我将看到与输出相同的随机数,而不是预期的不同数。
(当然,我在运行应用程序之间等待的时间超过一秒钟)
如果我将上面的语句放在run()
方法中每个runnable的开头,则行为会发生变化,并且在执行之间会得到不同的数字。
我是否需要在每个线程中执行上述语句(分别在run()函数中运行)?这似乎很糟糕,不是一个好的解决方案
有没有一种方法可以为任何线程设置一个全局种子,从而避免上述问题
我做错了什么?我感谢任何意见 您是否尝试使用QDebug打印时间以查看它们是否不同?是否可以粘贴更多的代码,包括实际的随机数调用,而不仅仅是qsrand?