qsrand и qrand в потоках... |
Здравствуйте, гость ( Вход | Регистрация )
qsrand и qrand в потоках... |
Гость_ukazoid_* |
18.12.2007, 15:44
Сообщение
#1
|
Гости |
Генерирую уникальное число, в потоке. Потоков много.
Когда я должен вызывать qsrand для того, чтобы число и правда было уникальным? Сейчас у меня частенько числа повторяются. |
|
|
Swappp |
19.12.2007, 14:49
Сообщение
#2
|
Студент Группа: Новичок Сообщений: 20 Регистрация: 26.11.2007 Пользователь №: 25 Спасибо сказали: 1 раз(а) Репутация: 1 |
Вообще по документации qrand() - "Thread-safe version of the standard C++ rand() function.". Т.е. ничего предпринимать вроде как не надо. И в исходниках написано:
Цитата // On Windows srand() and rand() already use Thread-Local-Storage // to store the seed between calls Но вызов в разных потоках qsrand(time()) или аналогичным способом, естественно может привести к выбору одной и той же последовательности. Можно попробовать что то вроде qsrand(QTime(0,0,0).msecsTo(QTime::currentTime())), это немного улучшит ситуацию. Так же можно еще xor'ом сложить с указателем на поток, т.е. qsrand(QTime(0,0,0).msecsTo(QTime::currentTime())^(int)thread()) вызывая в контексте QObject с правильно выставленным потоком, тогда повторятся уже вряд ли будет. |
|
|
ukazoid |
19.12.2007, 17:04
Сообщение
#3
|
Новичок Группа: Новичок Сообщений: 6 Регистрация: 19.12.2007 Пользователь №: 50 Спасибо сказали: 0 раз(а) Репутация: 0 |
Спасибо, заработало так как нужно.
|
|
|
Текстовая версия | Сейчас: 18.12.2024, 23:18 |