掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
複数のFTPサーバーから並列でファイルをゲットするには (ID:101083)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
環境:VB6+WinXP+BASP21.FTPオブジェクト FTPサーバーが複数あり、定期的に指定フォルダ内のファイルリストをチェックし、指定拡張子のファイルのみ自PCに移動するツールを開発中です。 周期がばらばらなのでForm1にタイマーを複数配置し、タイマーイベントで所定の処理を行います。 Private Sub timFTP_Timer(Index As Integer) Dim Ftp As Object Set Ftp = CreateObject("BASP21.FTP") r1 = Ftp.Connect(パラメタ) : r2 = Ftp.GetDir(どこか) : r3 = Ftp.GetFile(どれか) r4 = Ftp.DeleteFile(どれか) : EndSub 期待通り、timFTP(1)の処理中にtimFTP(2)のタイマーイベントが発生すればtimFTP(2)の処理は開始します。 FTPオブジェクトはちゃんと作成され、別のサーバーに同時にログインできています。 しかし、timFTP(2)の処理中はtimFTP(1)の処理は止まってしまっています。 接続先はまったく別の機体なのでそこは並列実行したいところです。 調べたところGetFileがもっとも時間がかかっていて、1ファイル1〜2秒かかっていて、最大10個のファイルを移動します。 (10個というのは1周期につき10個と制限を設けています) このGetFile関数はコールバック関数なのですが、どうやらスレッドを停止させて待機しているよう(Form1の反応が無くなる)、そのせいで、並列処理ではなく直列処理になってしまっています。 (並列でなくても仕事はちゃんとしています) ちなみに接続先の数は10台以上20台未満、チェック周期は10〜150秒で混在、ファイルは0〜4個(上限10個)次々に出現し、ファイルサイズは300〜600kByte程なので、衝突頻度はかなりあります。 今回はForm1のタイマーイベント内でFTPオブジェクトをインスタンスしていますが、 FTPオブジェクトの実装方法を変えれば並列処理は可能にならないものでしょうか? あるいはBASP21.FTPオブジェクトを使わないでFTPするときのお薦めはありませんか? シングルスレッドでも手続き的には並列動作は実現可能だと思っていますが、FTPのインターフェースを自作するのは時間とパワーががが
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.