Move pseudo RNG seeding to start of application

Also switched  to qrand() in place  of rand() where possible  as it is
thread safe.

git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@5716 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
Bill Somerville 2015-07-12 10:28:28 +00:00
parent 5e2507e179
commit 5e3ec0e891
6 changed files with 19 additions and 15 deletions

View File

@ -32,14 +32,13 @@ Modulator::Modulator (unsigned frameRate, unsigned periodLengthInSeconds,
, m_phi {0.0} , m_phi {0.0}
, m_toneSpacing {0.0} , m_toneSpacing {0.0}
, m_fSpread {0.0} , m_fSpread {0.0}
, m_itone0 {0}
, m_frameRate {frameRate} , m_frameRate {frameRate}
, m_period {periodLengthInSeconds} , m_period {periodLengthInSeconds}
, m_state {Idle} , m_state {Idle}
, m_tuning {false} , m_tuning {false}
, m_cwLevel {false} , m_cwLevel {false}
{ {
qsrand (QDateTime::currentMSecsSinceEpoch()); // Initialize random seed
m_itone0=0;
} }
void Modulator::start (unsigned symbolsLength, double framesPerSymbol, void Modulator::start (unsigned symbolsLength, double framesPerSymbol,
@ -232,8 +231,8 @@ qint64 Modulator::readData (char * data, qint64 maxSize)
int j=m_ic/480; int j=m_ic/480;
if(m_fSpread>0.0 and j!=j0) { if(m_fSpread>0.0 and j!=j0) {
float x1=(float)rand()/RAND_MAX; float x1=(float)qrand()/RAND_MAX;
float x2=(float)rand()/RAND_MAX; float x2=(float)qrand()/RAND_MAX;
toneFrequency = toneFrequency0 + 0.5*m_fSpread*(x1+x2-1.0); toneFrequency = toneFrequency0 + 0.5*m_fSpread*(x1+x2-1.0);
m_dphi = m_twoPi * toneFrequency / m_frameRate; m_dphi = m_twoPi * toneFrequency / m_frameRate;
j0=j; j0=j;

View File

@ -6,7 +6,6 @@
#include <QList> #include <QList>
#include <QSet> #include <QSet>
#include <QtWidgets> #include <QtWidgets>
#include <sys/time.h>
#include "SettingsGroup.hpp" #include "SettingsGroup.hpp"
#include "Configuration.hpp" #include "Configuration.hpp"
@ -119,12 +118,6 @@ Dialog::Dialog (QSettings * settings, Configuration const * configuration, BandL
main_layout->addLayout (bottom_layout); main_layout->addLayout (bottom_layout);
setLayout (main_layout); setLayout (main_layout);
//init random seed for random number generator used in tx scheduler
struct timeval time;
gettimeofday(&time,NULL);
srand((time.tv_sec*1000)+(time.tv_usec/1000));
} }
Dialog::~Dialog () Dialog::~Dialog ()

View File

@ -145,8 +145,8 @@ float gran()
* that are inside the unit circle * that are inside the unit circle
*/ */
do { do {
v1 = 2.0 * (float)rand() / RAND_MAX - 1; v1 = 2.0 * (float)qrand() / RAND_MAX - 1;
v2 = 2.0 * (float)rand() / RAND_MAX - 1; v2 = 2.0 * (float)qrand() / RAND_MAX - 1;
rsq = v1*v1 + v2*v2; rsq = v1*v1 + v2*v2;
} while(rsq >= 1.0 || rsq == 0.0); } while(rsq >= 1.0 || rsq == 0.0);
fac = sqrt(-2.0*log(rsq)/rsq); fac = sqrt(-2.0*log(rsq)/rsq);

View File

@ -5,6 +5,7 @@
#include <locale.h> #include <locale.h>
#include <QDateTime>
#include <QApplication> #include <QApplication>
#include <QRegularExpression> #include <QRegularExpression>
#include <QObject> #include <QObject>
@ -28,6 +29,18 @@
#include "TraceFile.hpp" #include "TraceFile.hpp"
#include "mainwindow.h" #include "mainwindow.h"
namespace
{
struct RNGSetup
{
RNGSetup ()
{
// one time seed of pseudo RNGs from current time
auto seed = QDateTime::currentMSecsSinceEpoch ();
qsrand (seed); // this is good for rand() as well
}
} seeding;
}
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {

View File

@ -4009,7 +4009,7 @@ void MainWindow::p1ReadFromStdout() //p1readFromStdout
m_nWSPRdecodes=0; m_nWSPRdecodes=0;
ui->DecodeButton->setChecked (false); ui->DecodeButton->setChecked (false);
if(m_uploadSpots) { if(m_uploadSpots) {
float x=rand()/((double)RAND_MAX + 1.0); float x=qrand()/((double)RAND_MAX + 1.0);
int msdelay=20000*x; int msdelay=20000*x;
uploadTimer->start(msdelay); //Upload delay uploadTimer->start(msdelay); //Upload delay
} else { } else {

View File

@ -38,7 +38,6 @@ PSK_Reporter::PSK_Reporter(MessageClient * message_client, QObject *parent) :
"00960004"; // Report time "00960004"; // Report time
qsrand(QDateTime::currentDateTime().toTime_t());
m_randomId_h = QString("%1").arg(qrand(),8,16,QChar('0')); m_randomId_h = QString("%1").arg(qrand(),8,16,QChar('0'));
QHostInfo::lookupHost("report.pskreporter.info", this, SLOT(dnsLookupResult(QHostInfo))); QHostInfo::lookupHost("report.pskreporter.info", this, SLOT(dnsLookupResult(QHostInfo)));