Версия для печати темы
Форум на CrossPlatform.RU _ Qt Общие вопросы _ Валидность URL
Автор: Dimix 16.1.2011, 14:40
Помогите в решении проблемы. Необходимо если есть новая версия программы предложить пользователю скачать ее.
Моя логика мышления такова необходимо задать url для новой версии программы и проверять его на существование.
Но при проверке на валидность любой url распознается как валидный. Как быть в этом случае?
Проблемма с rand();
Как правильно произвольное число получить?
Автор: maint 16.1.2011, 15:00
Цитата(Dimix @ 16.1.2011, 19:40)
Помогите в решении проблемы. Необходимо если есть новая версия программы предложить пользователю скачать ее.
Моя логика мышления такова необходимо задать url для новой версии программы и проверять его на существование.
Но при проверке на валидность любой url распознается как валидный. Как быть в этом случае?
Проблемма с rand();
Как правильно произвольное число получить?
перед использованием 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" получаю случайное число.
Это как? Мусор чтоли рэндом?
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)