crossplatform.ru

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

2 страниц V   1 2 >  
Тема закрытаНачать новую тему
> [РЕШЕНО] qrand и qsrand.., Ускорение времени))
breeve
  опции профиля:
сообщение 29.12.2009, 15:54
Сообщение #1


Участник
**

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

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




Репутация:   1  


Вот небольшой код:
    qsrand(time(NULL));
    for(int i = 0; i < 8; i++)
    {
        a = qrand() % 36;
        qDebug() << a;
        str[i] = alf[a];
    }

Меня интересует такой вопрос. Может ли случайное значение вычислять быстрее чем каждую секунду? Если может то как это сделать?

Сообщение отредактировал breeve - 29.12.2009, 15:55
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 29.12.2009, 16:07
Сообщение #2


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

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

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




Репутация:   44  


А у тебя этот код выполняется 8 секунд?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
breeve
  опции профиля:
сообщение 29.12.2009, 19:11
Сообщение #3


Участник
**

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

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




Репутация:   1  


Цитата(BRE @ 29.12.2009, 16:07) *
А у тебя этот код выполняется 8 секунд?

Почему восемь? Нет, это кусок кода. Если надо могу кинуть весь. А 8 это значит кол-во созданных символов.
Идея такова - сделать генератор паролей. Нажимаешь кнопку он тебе создает пароль..
Так вот поскольку каждое новое число может быть сгенерированно не чаще одной секунды, и если ты нажимаешь на кнопку Generate чаще, то программа начинает тупить.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 29.12.2009, 20:36
Сообщение #4


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

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

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




Репутация:   44  


Цитата(breeve @ 29.12.2009, 19:11) *
Так вот поскольку каждое новое число может быть сгенерированно не чаще одной секунды, и если ты нажимаешь на кнопку Generate чаще, то программа начинает тупить.

Почему новое число не может быть сгенерированно чаще одного в секунду? Откуда это ограничение?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
breeve
  опции профиля:
сообщение 29.12.2009, 20:41
Сообщение #5


Участник
**

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

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




Репутация:   1  


Цитата(BRE @ 29.12.2009, 20:36) *
Почему новое число не может быть сгенерированно чаще одного в секунду? Откуда это ограничение?

ну во-первых я нажимаю на кнопку и оно чаще секунды не генерируется.. а во вторых time(NULL) это что?
это отсчет от какого-то там года(70-го кажется) и оно меняется каждую секунду..

Сообщение отредактировал breeve - 29.12.2009, 20:42
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 29.12.2009, 20:49
Сообщение #6


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

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

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




Репутация:   44  


qsrand вызывай один раз в начале программы, можно с текущим временем например.
А потом уже в программе вызываешь qrand и не обязательно раз в секунду. ;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
breeve
  опции профиля:
сообщение 29.12.2009, 21:14
Сообщение #7


Участник
**

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

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




Репутация:   1  


Цитата(BRE @ 29.12.2009, 20:49) *
qsrand вызывай один раз в начале программы, можно с текущим временем например.
А потом уже в программе вызываешь qrand и не обязательно раз в секунду. ;)


:unknown: давай я код кину ты компильнешь и посмотришь можно ли чаще или нет))

Сообщение отредактировал breeve - 29.12.2009, 21:15
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 29.12.2009, 21:16
Сообщение #8


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

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

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




Репутация:   44  


Давай.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
breeve
  опции профиля:
сообщение 29.12.2009, 21:22
Сообщение #9


Участник
**

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

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




Репутация:   1  


main.cpp
#include <QtGui>
#include "pass.h"


int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Pass w;
w.setFixedSize(w.minimumSize().width(), w.minimumSize().height());
w.show();
return a.exec();
}
pass.cpp
#include "pass.h"
//#include "inputDialog.h"

Pass::Pass(QWidget *parent)
: QWidget(parent)
{
lbl = new QLabel("&Password:");
ptxt = new QLineEdit;
lbl->setBuddy(ptxt);

generate = new QPushButton("Generate");
settings = new QPushButton("Settings");

vLay = new QVBoxLayout;
hLay = new QHBoxLayout;

hLay->addWidget(generate);
hLay->addWidget(settings);

vLay->addWidget(lbl);
vLay->addWidget(ptxt);
vLay->addLayout(hLay);
setLayout(vLay);

connect(settings, SIGNAL(clicked()), SLOT(slotSettingsClicked()));
connect(generate, SIGNAL(clicked()), SLOT(slotGenerate()));
}


void Pass::slotSettingsClicked()
{
//InputDialog input;
//input.show();
}

void Pass::slotGenerate()
{
QString alf = "ABCDEFGHIJKLMNOPRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
QString str;
int a = 0;
qsrand(time(NULL));
for(int i = 0; i < 8; i++)
{
a = qrand() % 62;
qDebug() << a;
str[i] = alf[a];

}
ptxt->clear();
ptxt->insert(str);
}
pass.h
#ifndef PASS_H
#define PASS_H

#include <QtGui>

class Pass : public QWidget
{
Q_OBJECT

public:
QLabel* lbl;
QLineEdit* ptxt;
QPushButton* generate;
QPushButton* settings;
QVBoxLayout * vLay;
QHBoxLayout * hLay;

Pass(QWidget *parent = 0);
~Pass() {};
public slots:
void slotSettingsClicked();
void slotGenerate();
};

#endif // PASS_H


Ааа... Я вообщем понял в чем проблема))
Надо было просто srand не в слоте писать а в конструкторе..
Но все равно и на том спасибо..
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 29.12.2009, 21:25
Сообщение #10


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


breeve, тебе же сказали:
Цитата(BRE @ 29.12.2009, 23:49) *
qsrand вызывай один раз в начале программы,
помести qsrand в функцию main

А остальное оставь как есть.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Тема закрытаНачать новую тему
Теги
Нет тегов для показа


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




RSS Текстовая версия Сейчас: 21.12.2024, 20:05