crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> qrand + qthread, нужен уникальный рандом в потоках
thechicho
  опции профиля:
сообщение 13.11.2011, 17:00
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 38
Регистрация: 26.9.2011
Пользователь №: 2907

Спасибо сказали: 1 раз(а)




Репутация:   0  


qDebug() << mt_rand(1, 99999999);

quint64 Thread::mt_rand(qint64 a, qint64 b)
{
    qsrand(QDateTime::currentMSecsSinceEpoch());
    return extrand()%(b-a+1)+a;
}

quint64 Thread::extrand()
{
    qsrand(QDateTime::currentMSecsSinceEpoch());
    return qrand() + qrand() * ( RAND_MAX + 1 );
}


сейчас так. если в 1 потоке, то все отлично работает. но мне нужно в каждом потоке получить свое униальное значение. подскажите как можно этого добиться?

Сообщение отредактировал thechicho - 13.11.2011, 18:20
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 13.11.2011, 17:11
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(thechicho @ 13.11.2011, 18:00) *
сейчас так. если в 1 потоке, то все отлично работает. но мне нужно в каждом потоке получить свое униальное значение. подскажите как можно этого добиться?

Добавь уникальность для каждой нитки, например, к значению времени прибавляй/отнимай/умножай/хорь/... значение this объекта-потока.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
thechicho
  опции профиля:
сообщение 13.11.2011, 17:23
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 38
Регистрация: 26.9.2011
Пользователь №: 2907

Спасибо сказали: 1 раз(а)




Репутация:   0  


// значение this объекта-потока
код, плиз?
я знаю только
currentThreadId();
currentThread();

но не умею к int их привести. как?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 13.11.2011, 17:36
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


reinterpret_cast<quint64>( this );
reinterpret_cast<quint64>( currentThread() );

Сообщение отредактировал BRE - 13.11.2011, 17:37
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
thechicho
  опции профиля:
сообщение 13.11.2011, 18:18
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 38
Регистрация: 26.9.2011
Пользователь №: 2907

Спасибо сказали: 1 раз(а)




Репутация:   0  


сенкс!
может кому пригодится.
аналог пхп функции mt_rand(); (Thread-Safety :lol: )

qDebug() << mt_rand(0, 9);

quint64 Thread::mt_rand(qint64 a, qint64 b)
{
    qsrand(QDateTime::currentMSecsSinceEpoch() + reinterpret_cast<quint64>(this));
    return extrand()%(b-a+1)+a;
}

quint64 Thread::extrand()
{
    qsrand(QDateTime::currentMSecsSinceEpoch() + reinterpret_cast<quint64>(this));
    return qrand() + qrand() * RAND_MAX;
}


Сообщение отредактировал thechicho - 13.11.2011, 18:20
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 28.3.2024, 21:42