C++/QTアプリケーションには「インストーラ」機能があります。すべて正常に機能しますが、プログラムが「コピー処理中」のときにウィンドウの外をクリックすると、何らかの形でがフォーカスを失い、コピー処理が終了するまでがフリーズすると、すべて正常に表示されます。QProgressBarの値は100 %。このような
イムコピー:この機能は、ファイルとQStringList繰り返し処理foreachループで呼び出されフリーズされたアプリケーションを防ぐためにファイルをコピーする
void Installer_C::copy(QString aSrcPath, QString aDstPath)
{
//handles
hSrc = CreateFileW(..); //source file
hDst = CreateFileW(..); //destination
//copy
ReadFile(...);
LockFile(...);
WriteFile(...); //->returnes bytesWritten
UnlockFile(...);
updateQProgressBar(bytesWritten); //updates progressbar in my application
CloseHandle(...);
}
は(私のlaunchInstall()機能にあります)。
私の問題のため、スレッドをこのコピープロセス用に作成することを考えました。 Installer_C::copy()
コールごとに新しいスレッドを作成するか、launchInstall()
関数を呼び出すスレッドを1つだけ作成すると効率的です(多分役に立たないと思います)。
またはより良い質問:アプリケーションがフリーズするという私の問題を解決することすらできますか? ProgressBarがこのスレッドから更新されるように、どうすればいいですか?
ありがとう、ちょうど 'CopyThread :: run()'を呼びますか?そして、私の場合は、信号が非常に速く放射されているようですが、それらはすべて新しいスレッドに入っていますか?私は思っています:signal emits> copy start>次のシグナルが出ますが、コピーはまだ行われていません。分かりますか? – Drayke
回答を更新します。 1つのファイルがコピーされるたびに信号が放射されます。 –