I've writen an FTP client that previously used OnFtpProgress, and can confirm that it's called a tremendous amount of times, and in my case caused my client application to hit 100% CPU as a result. The way I've implemented it in the past is to create another FTP Client class derived from ICS FTPClient, with an added timer which is turned on at the start of the transfer, and off at the end of the transfer, and every time the timer is fired (at intervals of say, 1000 ms), it updates the progress bar.

Hope that helps with an efficient implementation.


On 22/02/2015 15:27, Angus Robertson - Magenta Systems Ltd wrote:
procedure TForm2.FtpProgress(Sender: TObject; Count: Int64;
   var Abort: Boolean);
    ProgressBar.Position := Count;
Correct concept, but you also need to set the ProgressBar Min and Max
properties to indicate how much progress has been made.

The FTP event simply returns a count of the number of bytes transferred, which
might be zero to several billion, so Min should be set to zero and Max to the
size of the file being uploaded, before the upload starts.  Harder for
downloads where you need to know the size of the file first.

Also, this event will typically be called dozens of times per second on a fast
internet connection, and updating the screen is time consuming so can slow down
the transfer speed, and the change may be invisible.

So you generally put more intelligence in the progress function to update no
more than once every one or more seconds or when there is a substantial change,
like 1 to 5%.


To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be

Reply via email to