Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.04.05;
Скачать: [xml.tar.bz2];

Вниз

Обращение к VCL объектам из потока   Найти похожие ветки 

 
KSergey ©   (2009-02-11 16:29) [40]

> Anatoly Podgoretsky ©   (11.02.09 15:13) [39]

Это совет или претензия? :)


 
Сергей М. ©   (2009-02-11 16:38) [41]


> KSergey ©   (11.02.09 16:29) [40]


Это ни ни другое - это Анатолию, наверно. что-то прищемили, и он не смог сдержать эмоций)


 
Anatoly Podgoretsky ©   (2009-02-11 16:58) [42]


> Это совет или претензия? :)

Это диагноз.

> это Анатолию, наверно. что-то прищемили, и он не смог сдержать
> эмоций)

А это поклеп.

Парень ленивый и даже не стесняется это громко заявить.


 
Сергей М. ©   (2009-02-11 17:01) [43]


> это поклеп


Тогда приношу свои извинения)


 
Palladin ©   (2009-02-11 19:32) [44]

Вообще то про

> UpdForm: TUpdForm; - объекта не существует,

это я еще раньше чем усе сказал :) но тот, кому это предназначалось, намека не понял...


 
markers ©   (2009-02-12 05:43) [45]

To: Сергей М.

> Потоки не ускорят соединение.

Ктоб спорил, это был пример той операции которую юзер захотел бы обломать...
To: KSergey

> приложение на кнопку "стоп". Нажимать дает, реагировать
> - нет.

Тоже не спорю, просто я уже могу обработать нажатие кнопки и завершить немедленно поток/потоки. А при работе всего в одном потоке я не только не могу остоновить работу по внешнему событию (возбуждённому не в обработке задачи), но и банально не смогу нажать батон...

To: All
Каждый делает ляпы и иногда грубые, но это не означает что нужно человека старатся уличить в мелочах яркий пример про медленное соединение, явно можно было понять что я пропустил слово "Например" ?

Вообще у меня такая задача.....:
Имеем форму на которых есть 3 CheckBox`а (Обновление ядра, БД, картинок), пользователь отмечает то что он хочет выполнять и нажимает кнопку Старт. Происходит (В потоке) проверка необходимости обновления выбранных пунктов. Затем собственно обновление тех пунктов что выбрал пользователь и обновления нашлись. Проверка необходимости обновления картинок достаточна длительна (прмиерно минуту), т.к. скачивается инишник с именем=хешем файла, программа обходит каталог картинок и составляет подобный список в финише сравниваются эти списки и скачиваются изменившиеся/новые картинки. Сам процесс обновления написан, отлажен и работает, но всё делается в одном потоке без возможности обломать процесс.


 
markers ©   (2009-02-12 05:57) [46]

Кстати, я счас подумал и решил, что проверку необходимости обновления проги, БД, картинок надо сделать рядом с непосредственно обновлением того или иного... Но опять же нужен управляющий поток... чтоб выполнялось обновления последовательно, чтоб затраченный скажем трафик при обновлении БД не улетучился при обнаружении новой версии ядра проги. Да и хотелось бы чтоб прогресс бар был "ровным" в том смысле чтоб каждый поток не дёргал его в зависимости от % выполнения.
Вообщем жду ваших предложений!
Спасибо!


 
markers ©   (2009-02-12 06:03) [47]

Fix markers ©   (12.02.09 05:43) [45]
> но всё делается в одном потоке без возможности обломать
Поправлю себя во избежании недопонимания.... делается всё в основном потоке программы, т.е. как обычно в процедуре обработки к примеру батона  и без создания потоков.


 
Anatoly Podgoretsky ©   (2009-02-12 09:58) [48]

> markers  (12.02.2009 5:43:45)  [45]

Вот только к 45 сообщению автор дошел до формулировки/объяснения задачи, когда должен был это сделать в исходном сообщение [0]


 
Anatoly Podgoretsky ©   (2009-02-12 10:00) [49]

> markers  (12.02.2009 6:03:47)  [47]

Мне что интересно, вижу тебе нужно ассинхронное исполнение, а ты почему то используешь блокирующие синхронные методы.


 
markers ©   (2009-02-12 10:42) [50]

> Anatoly Podgoretsky ©   (12.02.09 09:58) [48]
> автор дошел до формулировки/объяснения задачи, когда должен
> был это сделать в исходном сообщение [0]

Дыг вопрос то был в другом, не как сделать, а в чём проблема потому задача появилась сейчас когда мне стало интересы варианты решения задачи.
> Anatoly Podgoretsky ©   (12.02.09 10:00) [49]
> вижу тебе нужно ассинхронное исполнение, а ты почему то
> используешь блокирующие синхронные методы.

Не подскажите где можно скурить эту тему, в двух доках по потокам на эту тему нет ничего...

Заранее спасибо!


 
Anatoly Podgoretsky ©   (2009-02-12 11:09) [51]

> markers  (12.02.2009 10:42:50)  [50]

Это не про потоки, а про сокеты и их поддержку.


 
markers ©   (2009-02-12 11:54) [52]

> Anatoly Podgoretsky ©   (12.02.09 11:09) [51]
скачивание производится процедуру httpgetfile найденую в инете.
procedure HttpGetFile(url,filename:string);
var
 F:File;
 ResumePos,BufferLen,SumSize:DWORD;
 hSession, hURL: HInternet;
 Buffer: array[1..1024] of Byte;
 err: boolean;
begin
 SumSize:=0;ResumePos:=0;

 AssignFile(F,filename);
 IF FileExists(filename) then
 begin
   Reset(f,1);
   ResumePos:=FileSize(F);
   Seek(F,FileSize(F));
 end else ReWrite(f,1);

 hSession:=InternetOpen("Mozilla/4.0 (compatible; MSIE 6.0; Windows NT)",0,nil,nil,0);
 hURL:=InternetOpenURL(hSession,PChar(url),nil,0,0,0);
 InternetQueryDataAvailable(hURL, SumSize,0,0);
 label4.Caption:=IntToStr(SumSize);
 if ResumePos>0 then InternetSetFilePointer(hURL,ResumePos,nil,0,0);

 repeat
  err:=InternetReadFile(hURL, @Buffer,SizeOf(Buffer),BufferLen);
  if err=false then begin ShowMessage("Error");exit;end;
  BlockWrite(f,Buffer,BufferLen);
  Application.Processmessages;
 until (BufferLen=0);
end;

Только я её подправил для того чтоб было ясно сколько скачалось и прочее.
Паралельность не нужна, т.к. оно этапное..... сначало ядро проги если есть свежей, потом БД (если есть новей), а потом картинки (если изменились/добавились)...


 
Dennis I. Komarov ©   (2009-02-12 12:07) [53]


> Сам процесс обновления написан, отлажен и работает, но всё
> делается в одном потоке без возможности обломать процесс.
>

Что будет, если при обновлении БД "обломать" процесс?


 
markers ©   (2009-02-12 13:47) [54]

Dennis I. Komarov ©   (12.02.09 12:07) [53]
> Что будет, если при обновлении БД "обломать" процесс?

Ничего страшного, т.к. замена и реаницилизация БД происходит после успешной скачки. Но не хочется чтоб пользователь тратил лишний трафик, т.к. эта программа используется в достаточно мелких городах где не всегда есть безлимитник и дешёвый трафик..


 
Dennis I. Komarov ©   (2009-02-12 14:05) [55]

т.е. база после скачивания тупо меняется на новую... ладно, проехали

Для реализации данной задачи совсем не вижу необходимости потоком управлять визуальными объектами...
передавайте параметры работы потока в основной поток, а он пусть уже сам отвечает за визуализацию...


 
markers ©   (2009-02-12 14:16) [56]


> Dennis I. Komarov ©   (12.02.09 14:05) [55]
> т.е. база после скачивания тупо меняется на новую... ладно,
>  проехалиДля реализации данной задачи совсем не вижу необходимости
> потоком управлять визуальными объектами...передавайте параметры
> работы потока в основной поток, а он пусть уже сам отвечает
> за визуализацию...

Порождённый поток и будет за всё отвечать, но нужно чтоб поток самой программы не блокировался для возможности реализации остановки.
Думал делать всю работу в потоке самой программы (основной), а для визуализации породить окно в потоке которое бы отображало процесс не очень удобно для меня.
На счёт экономии трафика: я имелл ввиду когда все данные Ядро, бд, картинки обновлялись бы одновременно в нескольких потоках. Т.е я не хочу чтоб на середине обновления проги, бд, картинок, юзер захотел бы это дело обломать потратив в пустую трафик на некодаченое ядро проги и БД. (Картинки качаются в цикле по одной, и в данном случае облом для них абсолютно не критичен).
Вообщем в моём понимании операции должны идти последовательно, чтоб в случае облома пользователь не много терял в трафике, т.к. повторяюсь основное использование программы в городах где трафик стоит дорого и не во всех есть безлимит. А ядро программы весит порядка метра, БД порядка 3 метров, ну а картинки в зависимости от их количества :) в среднем по 7 кб на картинку


 
Dennis I. Komarov ©   (2009-02-12 15:34) [57]


> Порождённый поток и будет за всё отвечать, но нужно чтоб
> поток самой программы не блокировался для возможности реализации
> остановки.
> Думал делать всю работу в потоке самой программы (основной),
>  а для визуализации породить окно в потоке которое бы отображало
> процесс не очень удобно для меня.


goto [55]


 
markers ©   (2009-02-13 06:02) [58]

> Dennis I. Komarov ©   (12.02.09 15:34) [57]
А вы о этом, да можно. Но впринцепи после того как мне указали на неопределённый индетификатор, я немного переделал и работа с VCL из потока пошла :)
Всем спасибо!


 
Cobalt ©   (2009-02-16 00:21) [59]

2 markers ©
Если нужно обмениваться данными с потоком, к примеру,  нужно знать состояние работы потока, процент выполнения :

поток пишет куда-то свои данные, а с формы - таймер, обновляет состояние.

Или поток посылает форме сообщение, по которому она понимает, что надо обновить отображение, и считывает эти данные с какого-то глобального потокозащищенного объекта.



Страницы: 1 2 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.04.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.57 MB
Время: 0.007 c
1-1209223583
Zilog
2008-04-26 19:26
2009.04.05
генерация таблиц в RTF формате


6-1201962641
Paska
2008-02-02 17:30
2009.04.05
Измнение загружаемых страниц


15-1233824444
des
2009-02-05 12:00
2009.04.05
как исправить модуль?


15-1233845470
Strate
2009-02-05 17:51
2009.04.05
Обеспечить безопасность сохранения данных


11-1199012224
=BuckLr=
2007-12-30 13:57
2009.04.05
С новым годом!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский