【发布时间】:2016-06-27 07:07:37
【问题描述】:
我编写了一个带有“安装程序”功能的 C++/QT 应用程序。一切正常,但是当我在程序处于“复制过程”时在窗口外单击时,它会以某种方式失去焦点并冻结,直到复制过程结束,然后一切都以 QProgressBar 值为 100%。
我是这样复制的:
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(...);
}
这个函数在一个 foreach 循环中被调用,该循环遍历带有文件的 QStringList(位于我的 launchInstall() 函数中)。
由于我的问题,我考虑为这个复制过程创建 Threads。是为每个Installer_C::copy() 调用创建一个新线程更有效,还是只创建一个线程来调用launchInstall() 函数(我认为它没有多大帮助)。
或者更好的问题:它甚至可以解决我的应用程序冻结的问题吗?我该怎么做才能让 ProgressBar 仍然从这个线程更新?
【问题讨论】:
标签: c++ multithreading qt copy freeze