Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.14;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.043 c
10-1098969514
Oleg_
2004-10-28 17:18
2005.08.14
COM сервер


8-1112783673
DS
2005-04-06 14:34
2005.08.14
Определение разрешения картинок (jpg bmp gif)


4-1118753597
elf-eluna-alina
2005-06-14 16:53
2005.08.14
IO ERROR 105 - мистификации


3-1120299745
ali_tash
2005-07-02 14:22
2005.08.14
Как остановить InterBase Sever


3-1120466958
ААА
2005-07-04 12:49
2005.08.14
Как перейти