Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Валидность URL
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Общие вопросы
Dimix
Помогите в решении проблемы. Необходимо если есть новая версия программы предложить пользователю скачать ее.
Моя логика мышления такова необходимо задать url для новой версии программы и проверять его на существование.
Но при проверке на валидность любой url распознается как валидный. Как быть в этом случае?

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

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

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

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

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

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

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

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

тебе же уже выше написали, ответы не читаешь?
srand(time(NULL));
int x = rand(); // x != 41
Dimix
Цитата(DEADHUNT @ 16.1.2011, 20:36) *
тебе же уже выше написали, ответы не читаешь?

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

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

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

игнорируешь?
Qt здесь вообще не причём, это чистый C.
Litkevich Yuriy
Цитата(Dimix @ 16.1.2011, 23:12) *
configure -static
configure -shared
а ты смысл этих команд можешь объяснить? И какой результат ты ожидаешь от них?
Dimix
Цитата(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
мне не интересно знать где ты это увидел. Ответь на два моих вопроса, неужели это так сложно?
Dimix
Убедится, что Qt собрано статически.
Вернуть в динамическую сборку.
Соберет Qt статически, библиотеки будут без номера версии.
Litkevich Yuriy
Цитата(Dimix @ 17.1.2011, 2:26) *
Убедится, что Qt собрано статически.
Вернуть в динамическую сборку.
Соберет Qt статически, библиотеки будут без номера версии.
а какое это имеет отношение к "Проблемма с rand();"?
Dimix
Цитата(Litkevich Yuriy @ 17.1.2011, 10:58) *
а какое это имеет отношение к "Проблемма с rand();"?

И теоритически и физически некакого. Просто после использования этих двух команд число перестало случайно выбиратся.
Dimix
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
Цитата(Dimix @ 21.1.2011, 8:59) *
описываю переменную типа int x; после присвоения кому либо "x" получаю случайное число.

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

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

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

Если честно сам непойму что случилось до нового года делал так и все работало
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
Цитата(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
int pine;
srand(qrand());
pine=rand();
if(pine<999){
   pine+=pine*5739;
}
Вот таким образом тоже работает maint с использованием srand(getpid()); //pine=31;
maint
Цитата(Dimix @ 23.1.2011, 10:03) *
int pine;
srand(qrand());
pine=rand();
if(pine<999){
   pine+=pine*5739;
}
Вот таким образом тоже работает maint с использованием srand(getpid()); //pine=31;

Не понял мысли, но функция srand используется ТОЛЬКО ОДИН раз в программе. Это инициализация генератора псевдослучайных чисел. Это если все время выдается одно и то же число
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.