crossplatform.ru

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

Dimix
  опции профиля:
сообщение 16.1.2011, 14:40
Сообщение #1


Студент
*

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

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




Репутация:   0  


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

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

int x;
x=rand();//x = 41
Как правильно произвольное число получить?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
2 страниц V   1 2 >  
Начать новую тему
Ответов (1 - 18)
maint
  опции профиля:
сообщение 16.1.2011, 15:00
Сообщение #2


Участник
**

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

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




Репутация:   2  


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

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

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

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

Сообщение отредактировал maint - 16.1.2011, 15:02
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 16.1.2011, 18:36
Сообщение #3


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

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

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




Репутация:   94  


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


Студент
*

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

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




Репутация:   0  


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

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

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

Сообщение отредактировал Dimix - 16.1.2011, 20:34
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DEADHUNT
  опции профиля:
сообщение 16.1.2011, 20:36
Сообщение #5


Активный участник
***

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

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




Репутация:   2  


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

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

тебе же уже выше написали, ответы не читаешь?
srand(time(NULL));
int x = rand(); // x != 41
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Dimix
  опции профиля:
сообщение 16.1.2011, 21:12
Сообщение #6


Студент
*

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

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




Репутация:   0  


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

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

все после этого 41.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
DEADHUNT
  опции профиля:
сообщение 16.1.2011, 21:17
Сообщение #7


Активный участник
***

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

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




Репутация:   2  


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

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

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

Сообщение отредактировал DEADHUNT - 16.1.2011, 21:18
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 16.1.2011, 21:26
Сообщение #8


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

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

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




Репутация:   94  


Цитата(Dimix @ 16.1.2011, 23:12) *
configure -static
configure -shared
а ты смысл этих команд можешь объяснить? И какой результат ты ожидаешь от них?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Dimix
  опции профиля:
сообщение 16.1.2011, 22:26
Сообщение #9


Студент
*

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

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




Репутация:   0  


Цитата(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
Сообщение #10


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

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

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




Репутация:   94  


мне не интересно знать где ты это увидел. Ответь на два моих вопроса, неужели это так сложно?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Dimix
  опции профиля:
сообщение 17.1.2011, 0:26
Сообщение #11


Студент
*

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

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




Репутация:   0  


Убедится, что Qt собрано статически.
Вернуть в динамическую сборку.
Соберет Qt статически, библиотеки будут без номера версии.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 17.1.2011, 10:58
Сообщение #12


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

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

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




Репутация:   94  


Цитата(Dimix @ 17.1.2011, 2:26) *
Убедится, что Qt собрано статически.
Вернуть в динамическую сборку.
Соберет Qt статически, библиотеки будут без номера версии.
а какое это имеет отношение к "Проблемма с rand();"?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Dimix
  опции профиля:
сообщение 17.1.2011, 14:56
Сообщение #13


Студент
*

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

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




Репутация:   0  


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

И теоритически и физически некакого. Просто после использования этих двух команд число перестало случайно выбиратся.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Dimix
  опции профиля:
сообщение 21.1.2011, 8:59
Сообщение #14


Студент
*

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

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




Репутация:   0  


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
Сообщение #15


Старейший участник
****

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

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




Репутация:   7  


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

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

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

Вот по такому принципу?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Dimix
  опции профиля:
сообщение 21.1.2011, 10:50
Сообщение #16


Студент
*

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

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




Репутация:   0  


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

Если честно сам непойму что случилось до нового года делал так и все работало
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
Сообщение #17


Участник
**

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

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




Репутация:   2  


Цитата(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 будет выдавать действительно псевдослучайное число. А мусор может привести к редкостной и длинной последовательности нулей, скажем. Это наиболее частый случай

Сообщение отредактировал maint - 22.1.2011, 7:49
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Dimix
  опции профиля:
сообщение 23.1.2011, 5:03
Сообщение #18


Студент
*

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

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




Репутация:   0  


int pine;
srand(qrand());
pine=rand();
if(pine<999){
   pine+=pine*5739;
}
Вот таким образом тоже работает maint с использованием srand(getpid()); //pine=31;
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
maint
  опции профиля:
сообщение 23.1.2011, 8:06
Сообщение #19


Участник
**

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

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




Репутация:   2  


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

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

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


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


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 5.5.2025, 12:06