crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> 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 с правильно выставленным потоком, тогда повторятся уже вряд ли будет.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 19.12.2024, 2:02