目錄
- 前言
- 一、QtConCurrent::run()介紹
- 二、QtConCurrent::run()使用
- 1.匯入模塊
- 2.增加執行緒中執行的函式
- 3.通過QFuture控制執行緒函式開始,結束,
- 三、呼叫bat腳本
- 四、代碼下載
前言
撰寫了一個通過界面操作實作對檔案夾的復制壓縮和解壓的工具,如果是單獨呼叫腳本或用命令實作,在操作大檔案夾的情況下界面會出現假死,因此可以使用QtConCurrent::run()啟動一個執行緒來執行呼叫腳本功能,工具界面如下,此工具只實作對單一檔案夾的操作,僅作為實作簡單功能,

一、QtConCurrent::run()介紹
Concurrent是并發的意思,QtConcurrent命名空間提供高層次的API,不需要使用低級執行緒原語的多執行緒程式,如互斥,讀寫鎖,等待條件或信號,用QtConcurrent撰寫的程式會根據可用處理器內核的數量自動調整使用的執行緒數,
QtConCurrent::run()是QtConcurrent命名空間里的函式,主要功能是啟動一個執行緒來執行一個函式,并且該執行緒取自全域QThreadPool,該函式的回傳值通過QFuture API提供,
二、QtConCurrent::run()使用
1.匯入模塊
在使用前需要在工程檔案中匯入模塊,否則定義相關頭檔案時會出現錯誤,
在(工程名).pro增加一行如下:
QT += concurrent
2.增加執行緒中執行的函式
以復制檔案夾為例,該函式內為呼叫copy.bat腳本
關鍵代碼如下:
bool mybat::coypProcess()
{
//呼叫bat腳本
return true;
}
3.通過QFuture控制執行緒函式開始,結束,
關鍵代碼如下:
QFuture<bool> future = QtConcurrent::run(this,&mybat::coypProcess);
while(!future.isFinished())
{
QApplication::processEvents(QEventLoop::AllEvents, 100);
}
三、呼叫bat腳本
傳入兩個引數,
關鍵代碼如下:
QProcess press(NULL);
press.setWorkingDirectory(DirPath);
QString command =DirPath+"\\"+"copy.bat"+ blank + m_filePath + blank + m_objFilePath +"\\";
press.start(command);
press.waitForFinished(-1);
四、代碼下載
檔案里包含3個使用的bat腳本,
mybat代碼下載
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/171594.html
標籤:其他
