Главная страница
    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.47 MB
Время: 0.013 c
14-1122088462
Comrade
2005-07-23 07:14
2005.08.14
Copy в C++


14-1122286791
NewWonder
2005-07-25 14:19
2005.08.14
Экзамен по информатике: нужна помощь


3-1120805389
dreamse
2005-07-08 10:49
2005.08.14
Проблема в добавлении записи через хранимую процедуру


4-1118826576
_Вован
2005-06-15 13:09
2005.08.14
Как перекодировать String в DOS-кодировку ?


4-1118515044
ctranik
2005-06-11 22:37
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский