crossplatform.ru

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


  Ответ в qrand + qthread
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
thechicho Дата 13.11.2011, 18:18
  сенкс!
может кому пригодится.
аналог пхп функции 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;
}
BRE Дата 13.11.2011, 17:36
  reinterpret_cast<quint64>( this );
reinterpret_cast<quint64>( currentThread() );
thechicho Дата 13.11.2011, 17:23
  // значение this объекта-потока
код, плиз?
я знаю только
currentThreadId();
currentThread();

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

Добавь уникальность для каждой нитки, например, к значению времени прибавляй/отнимай/умножай/хорь/... значение this объекта-потока.
thechicho Дата 13.11.2011, 17:00
 
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 потоке, то все отлично работает. но мне нужно в каждом потоке получить свое униальное значение. подскажите как можно этого добиться?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 18:20