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

Вниз

idfrp.onprogress   Найти похожие ветки 

 
maximsm   (2005-07-23 12:50) [0]

Здравствуйте!

Есть проблема с компонентом tidFtp
у него есть события

OnWorkBegin
OnWork
OnWorkEnd

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

OnWork:
g2.Progress:=round((AWorkCount/g2.MaxValue)*100);
Application.ProcessMessages;
invalidate;
прогресс вычисляется правильно,
но так как дело происходит в потоке,
то проривоваться не удаётся.
Я пытался найти в исходниках потоки,
но даже упоминания там не увидел.
Как быть?
Как отыскать поток и заставить его синхронизироваться?


 
maximsm   (2005-07-23 18:17) [1]

как вообще выловить все потоки что есть в моей программе и заставить конкретный из них синхронизироваться?


 
begin...end ©   (2005-07-23 20:35) [2]

> maximsm   (23.07.05 18:17) [1]

> как вообще выловить все потоки что есть в моей
> программе

Сделать снимок с помощью CreateToolhelp32Snapshot, затем вызывать Thread32First/Thread32Next и находить потоки своего процесса, сравнивая поле tagTHREADENTRY32.th32OwnerProcessID с результатом GetCurrentProcessId. Для каких-либо операций с найденным потоком можно использовать его Id, хранящийся в поле tagTHREADENTRY32.th32ThreadID.


 
tesseract ©   (2005-07-23 20:54) [3]

>>как вообще выловить все потоки что есть в моей программе и заставить конкретный из них синхронизироваться?

Ты их создал ты их и контролируй. Для этого и придуманы TcriticalSection TSemaphore Tmutex и тд


 
maximsm   (2005-07-24 19:23) [4]

не нашёл я своего потока, сколько не рылся в дремучих исходниках indy.

может быть есть альтернативы idFTP с безглючной Progres индикацией?


 
tesseract ©   (2005-07-24 19:38) [5]

>>> не нашёл я своего потока,
Молодец !!!!!!!

Ты же потоки сам соpдаёшь? сделай так что-бы они отчитывались о своей работе. Записывай их ID в какой-нибудь Tlist


 
maximsm   (2005-07-25 17:54) [6]

Скажите, что мне даст этот ID ?

Да, я смогу манипулировать этим потоком, в этот конкретный раз,
один раз я смогу сам себе показать прогресс, прекрасно!
Но мне то надо юзеру показывать этот прогресс всегда,
а для этого мне нужно найти поток не в памяти, а в исходниках.
в юните idftp ни одного упоминания о tthread.

>Ты же потоки сам соpдаёшь?

Этот сор даёт ifFtp, а не я. Мне найти бы этот сор,
я даже согласен отказаться от многопоточности ради прорисовки прогресса.


 
maximsm   (2005-07-27 04:16) [7]

посоветовали ICS,
говорят что круто и безглючно.
Поставил.

Пишу onProgress : gauge1.progress=50;
пишу multithreaded:=false
Ноль эмоций.
Они что все сговорились? Зачем давать доступ к событию
onProgress если оно не работает???


 
Джо ©   (2005-07-27 04:55) [8]

maximsm   (23.07.05 12:50) [0].

Не знаю, у меня все прекрасно работает с Инди. Посмотри, может ты чего-то напутал.
---
Мой работающий код.
На форме IdFTP1, Button1, ProgressBar1.

procedure TForm1.Button1Click(Sender: TObject);
var
 AStream: TMemoryStream;
begin
 AStream := TMemoryStream.Create;
 try
   IdFTP1.User := "Anonymous";
   IdFTP1.Password := "me@me.com";
   IdFTP1.Connect(True);
   IdFTP1.Host := "ftp://work";
   // размер файла
   ProgressBar1.Max := IdFTP1.Size("video/movies/Hon.Gil.Don.avi");
   // получаем файл
   IdFTP1.Get("video/movies/Hon.Gil.Don.avi",AStream);
 finally
   AStream.Free;
 end;
end;

procedure TForm1.IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode;
 const AWorkCount: Integer);
begin
 Application.ProcessMessages;
 Caption := Format ("%d из %d скачано",[ProgressBar1.Max,AWorkCount]);
 ProgressBar1.Position := AWorkCount;
end;


Вот и весь код. Больше никаких ни обработчиков событий, ни рефрешей/инвалидэйтов.


 
maximsm   (2005-07-27 15:49) [9]

Спасибо, Джо!

Я напутал с tgauge.progress
он в рантайме вообще не устанавливается.
И работать можно только с addProgress



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

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

Наверх





Память: 0.46 MB
Время: 0.011 c
1-1122364083
Uran
2005-07-26 11:48
2005.08.14
Добавить событие OnMousDown OnMousUp


1-1122443062
Legion89
2005-07-27 09:44
2005.08.14
Задание цвета текста в RichEdit


4-1119341528
Kerk
2005-06-21 12:12
2005.08.14
EM_CHARFROMPOS


4-1118683551
ZSergey
2005-06-13 21:25
2005.08.14
Как перехватить запуск программы в проводнике?


9-1113736502
Yegorchic
2005-04-17 15:15
2005.08.14
Поворот камеры





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский