Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ Валидность URL

Автор: Dimix 16.1.2011, 14:40

Помогите в решении проблемы. Необходимо если есть новая версия программы предложить пользователю скачать ее.
Моя логика мышления такова необходимо задать url для новой версии программы и проверять его на существование.
Но при проверке на валидность любой url распознается как валидный. Как быть в этом случае?

Проблемма с rand();

Раскрывающийся текст

int x;
x=rand();//x = 41
Как правильно произвольное число получить?

Автор: maint 16.1.2011, 15:00

Цитата(Dimix @ 16.1.2011, 19:40) *
Помогите в решении проблемы. Необходимо если есть новая версия программы предложить пользователю скачать ее.
Моя логика мышления такова необходимо задать url для новой версии программы и проверять его на существование.
Но при проверке на валидность любой url распознается как валидный. Как быть в этом случае?

Проблемма с rand();
Раскрывающийся текст

int x;
x=rand();//x = 41
Как правильно произвольное число получить?

перед использованием rand необходимо сделать его инициализацию функцией srand(число). Число берется от чего угодно, миллисекунды, UID винта, темпиратура на Марсе в конце концов :)
Теперь о версии.Мой знакомый делал проверку не на существование программы, а текстового файлика, где указанна новая версия. Файлик забирается и версия из скольки то цифр сверяется с текущей версией. Там же можно указать список URL откуда можно на сегодняшний день вытащить новую версию программы. Т.о нет привязки к одному серверу.

Автор: Litkevich Yuriy 16.1.2011, 18:36

Цитата(maint @ 16.1.2011, 17:00) *
Мой знакомый делал проверку не на существование программы, а текстового файлика, где указанна новая версия. Файлик забирается и версия из скольки то цифр сверяется с текущей версией. Там же можно указать список URL откуда можно на сегодняшний день вытащить новую версию программы. Т.о нет привязки к одному серверу.
многие программы используют такой подход. И часто используют XML-файлы на сервере.

Автор: Dimix 16.1.2011, 20:15

Цитата(maint @ 16.1.2011, 18:36) *
Т.о нет привязки к одному серверу.

Та а вот например Adobe у них же принцип проверки по url?

А почему я делаю int x=rand(); и оно у меня получает только 41 всегда одно и тоже раньше так делал работало. В чем причина?

Автор: DEADHUNT 16.1.2011, 20:36

можно сервер поднять на хостинге и из проги общаться с ним через сокеты.

Цитата(Dimix @ 16.1.2011, 20:15) *
А почему я делаю int x=rand(); и оно у меня получает только 41 всегда одно и тоже раньше так делал работало. В чем причина?

тебе же уже выше написали, ответы не читаешь?
srand(time(NULL));
int x = rand(); // x != 41

Автор: Dimix 16.1.2011, 21:12

Цитата(DEADHUNT @ 16.1.2011, 20:36) *
тебе же уже выше написали, ответы не читаешь?

Читаю. Дело в том что как не крути rand() в любом случае передаст 41.
Вопрос почему? Я в директории Qt из cmd делал следующие
configure -static
configure -shared

все после этого 41.

Автор: DEADHUNT 16.1.2011, 21:17

Цитата(Dimix @ 16.1.2011, 21:12) *
все после этого 41.

ты строчку
srand(time(NULL))

игнорируешь?
Qt здесь вообще не причём, это чистый C.

Автор: Litkevich Yuriy 16.1.2011, 21:26

Цитата(Dimix @ 16.1.2011, 23:12) *
configure -static
configure -shared
а ты смысл этих команд можешь объяснить? И какой результат ты ожидаешь от них?

Автор: Dimix 16.1.2011, 22:26

Цитата(Litkevich Yuriy @ 16.1.2011, 21:26) *
Цитата(Dimix @ 16.1.2011, 23:12) *
configure -static
configure -shared
а ты смысл этих команд можешь объяснить? И какой результат ты ожидаешь от них?


http://cyast-cat.blogspot.com/2009/03/qt-windows.html вот сдесь я это увидел.

Автор: Litkevich Yuriy 16.1.2011, 22:51

мне не интересно знать где ты это увидел. Ответь на два моих вопроса, неужели это так сложно?

Автор: Dimix 17.1.2011, 0:26

Убедится, что Qt собрано статически.
Вернуть в динамическую сборку.
Соберет Qt статически, библиотеки будут без номера версии.

Автор: Litkevich Yuriy 17.1.2011, 10:58

Цитата(Dimix @ 17.1.2011, 2:26) *
Убедится, что Qt собрано статически.
Вернуть в динамическую сборку.
Соберет Qt статически, библиотеки будут без номера версии.
а какое это имеет отношение к "Проблемма с rand();"?

Автор: Dimix 17.1.2011, 14:56

Цитата(Litkevich Yuriy @ 17.1.2011, 10:58) *
а какое это имеет отношение к "Проблемма с rand();"?

И теоритически и физически некакого. Просто после использования этих двух команд число перестало случайно выбиратся.

Автор: Dimix 21.1.2011, 8:59

public:
    QNetworkAccessManager qnam;
    QNetworkReply *reply;
void MainWindow::newVersion()
{
    QUrl url("http://ваша ссылка/version.txt");//version.txt => 2.1
    reply = qnam.get(QNetworkRequest(url));
    connect(reply, SIGNAL(readyRead()),this, SLOT(httpReadyRead()));
}
void MainWindow::httpReadyRead()
{
    QByteArray data = reply->readAll();//все данные из файла записываем в масив
}
Вот таким образом сделал проверку новой версии!
По поводу rand(); убрал его совсем просто описываю переменную типа int x; и после присвоения кому либо "x" получаю случайное число.
Всем спасибо!

Автор: Rocky 21.1.2011, 9:42

Цитата(Dimix @ 21.1.2011, 8:59) *
описываю переменную типа int x; после присвоения кому либо "x" получаю случайное число.

Это как? Мусор чтоли рэндом? :shok:
int x;

int y = x; // random number???

Вот по такому принципу?

Автор: Dimix 21.1.2011, 10:50

Цитата
Вот по такому принципу?

Если честно сам непойму что случилось до нового года делал так и все работало
int pine;
pine=rand();
QLineEdit* edit = new QLineEdit;
if(pine<999){
pine+=pine*5846;
}
QString pin;
pin.setNum(pine);

Сейчас реализовал так
qint64 pine;
QLineEdit* edit = new QLineEdit;
if(pine<999){
pine+=pine*5846;
}
QString pin;
pin.setNum(pine);
Может быть реализация и очень даже смехотворная но оно работает без багов.

Автор: maint 22.1.2011, 7:45

Цитата(Dimix @ 21.1.2011, 15:50) *
Цитата
Вот по такому принципу?

Если честно сам непойму что случилось до нового года делал так и все работало
int pine;
pine=rand();
QLineEdit* edit = new QLineEdit;
if(pine<999){
pine+=pine*5846;
}
QString pin;
pin.setNum(pine);

Сейчас реализовал так
qint64 pine;
QLineEdit* edit = new QLineEdit;
if(pine<999){
pine+=pine*5846;
}
QString pin;
pin.setNum(pine);
Может быть реализация и очень даже смехотворная но оно работает без багов.

чудовищная реализация. Все же повторю, ПЕРЕД ИСПОЛЬЗОВАНИЕМ ФУНКЦИИ rand, нужно сделать
srand(time(NULL));

или
srand(getpid());

Лучше это сделать один раз в головной программе. Тогда будет действительно псевдо-случайная последовательность.Тогда rand будет выдавать действительно псевдослучайное число. А мусор может привести к редкостной и длинной последовательности нулей, скажем. Это наиболее частый случай

Автор: Dimix 23.1.2011, 5:03

int pine;
srand(qrand());
pine=rand();
if(pine<999){
   pine+=pine*5739;
}
Вот таким образом тоже работает maint с использованием srand(getpid()); //pine=31;

Автор: maint 23.1.2011, 8:06

Цитата(Dimix @ 23.1.2011, 10:03) *
int pine;
srand(qrand());
pine=rand();
if(pine<999){
   pine+=pine*5739;
}
Вот таким образом тоже работает maint с использованием srand(getpid()); //pine=31;

Не понял мысли, но функция srand используется ТОЛЬКО ОДИН раз в программе. Это инициализация генератора псевдослучайных чисел. Это если все время выдается одно и то же число

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)