cURL経由でいくつかのファイルをダウンロードするための別のスレッドを起動するMFCアプリがあります。最初に、ファイル サイズと最終書き込み時刻を含むテキスト ファイルをダウンロードします。次に、ディスク上のファイルをチェックし、値が異なる場合はダウンロードするためにキューに入れます。問題は次のとおりです。スレッド内の CreateFile 呼び出しは、任意に INVALID_HANDLE_VALUE を返します。私は常に、CreateFile() が成功した後に CloseHandle() を実行します。失敗したファイルはランダムです。ルートディレクトリのファイルの場合もあれば、ネストされたディレクトリのファイルの場合もあります。この問題は、ローカリゼーションやディレクトリ/ファイル名とは関係ありません。すべてのチェックがパスする場合とパスしない場合があるためです。GetLastError() は、それぞれ「ファイルが見つかりません」/「パスが見つかりません」である 2 または 3 を返します。
ファイルの書き込み時間とサイズをチェックする関数を OnInitDialog() 関数に直接入れると、すべてが機能します。これはマルチスレッドの問題のようなにおいがしますが、メモリ割り当てからファイル ハンドルまですべてを再確認しました。
同じコードがコンソール アプリケーションでも別のスレッドで機能します。
プラットフォームは Win7 64bit です。
ランタイムと MFC に静的にリンクします。