superflexible 1 Posted 10 hours ago Hello, I am using TSslFtpClient in a multithreaded application. I get crashes inside the OpenSSL DLLs while uploading or downloading many smaller files in three separate threads (so three at a time). I set the Multithreaded property to true. I create all components in code, not in a DFM. So my question is, should I call TSslFtpClient.Create(nil) in the application's main thread, or in the thread where I am actually using it? Currently I have a method CreateComponents which I call via TThread.Synchronize(nil,CreateComponents). Are there any other precautions I have to take? I read about all the async recommendations but I cannot redesign the application from scratch. Many thanks. Share this post Link to post
Angus Robertson 616 Posted 1 hour ago Using threads to handle multiple components in parallel is unnecessary, provided you are using async methods, so fully event driven. I've done tests with hundreds of components running in parallel, the SSL negotiation takes a while so eventually limits the number in parallel. The FTP component should usually be created and destroyed within the thread. There is a specific component for your purpose, TIcsFtpMultiThread in OverbyteIcsFtpMult.pas with a sample OverbyteIcsXferTst. Angus Share this post Link to post
superflexible 1 Posted 58 minutes ago (edited) Hi, many thanks for your reply! My application already creates the threads, there is no way around it. I cannot use a component that creates its own threads. The threads are already there. I will look into it further and check if the latest ICS update maybe fixes the crashes. Edited 58 minutes ago by superflexible Share this post Link to post
Olli73 6 Posted 49 minutes ago At least createCompomponents should not be synchronized so that components gets created in thread context. Share this post Link to post
superflexible 1 Posted 18 minutes ago Many thanks! I'll try it. And I'll look at the source code of TIcsFtpMultiThread to learn how it does the threading. Share this post Link to post