![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
Гость_ukazoid_* |
![]()
Сообщение
#1
|
Гости ![]() |
Генерирую уникальное число, в потоке. Потоков много.
Когда я должен вызывать qsrand для того, чтобы число и правда было уникальным? Сейчас у меня частенько числа повторяются. ![]() |
|
|
![]() |
Swappp |
![]()
Сообщение
#2
|
Студент ![]() Группа: Новичок Сообщений: 20 Регистрация: 26.11.2007 Пользователь №: 25 Спасибо сказали: 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 |
![]()
Сообщение
#3
|
Новичок Группа: Новичок Сообщений: 6 Регистрация: 19.12.2007 Пользователь №: 50 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Спасибо, заработало так как нужно.
|
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 30.5.2025, 19:15 |