mFrame
載入中...
搜尋中...
無符合項目
ufm::util::CompletionWaiter 類別 參考文件

完成等待器,提供異步操作的同步等待機制。 更多...

#include <CompletionWaiter.h>

類別ufm::util::CompletionWaiter的繼承圖:
ufm::lang::Object ufm::lang::Interface

公開方法(Public Methods)

 CompletionWaiter (void)
 建構完成等待器物件
 
virtual ~CompletionWaiter (void) override
 解構完成等待器物件
 
bool waitDone (int timeout)
 等待操作完成(含超時控制)
 
bool waitDone (void)
 等待操作完成(無超時限制)
 
- 公開方法(Public Methods) 繼承自 ufm::lang::Object
void * operator new (size_t n)
 使用運算子 new 分配記憶體
 
void * operator new (size_t n, void *p)
 在指定記憶體上調用運算子 new
 
virtual ufm::lang::ObjectgetObject (void) override
 取得對應的 Object 物件
 
void delay (int milliseconds) const
 延遲指定的毫秒數進行執行緒等待
 
bool equals (Object *object) const
 判斷與另一物件是否為相同參照(指標型態比較)
 
bool equals (Object &object) const
 判斷與另一物件是否為相同參照(參照型態比較)
 
void wait (void) const
 使當前線程等待直到被通知
 
bool wait (int timeout) const
 等待通知或超時
 
bool yield (void) const
 讓執行緒讓渡控制權給同優先權的下一個執行緒
 
int lock (void) const
 核心鎖定,鎖定期間禁止線程切換
 
int unlock (void) const
 核心解鎖
 
ufm::sys::ThreadcurrentThread (void) const
 取得當前執行緒指標
 
virtual int hashcode (void) const
 返回對象的哈希碼值。支持這種方法是為了散列表,如HashMap提供的那樣。
 
- 公開方法(Public Methods) 繼承自 ufm::lang::Interface
virtual ~Interface (void)=default
 虛擬析構函式
 

保護方法(Protected Methods)

void notify (void)
 通知等待完成
 

詳細描述

完成等待器,提供異步操作的同步等待機制。

CompletionWaiter 類別提供了一個用於等待特定操作完成的同步機制。 它允許一個執行緒等待另一個執行緒或異步操作的完成, 支援超時控制和無限等待兩種模式。

主要功能:
  • 提供執行緒間的同步等待機制
  • 支援超時等待和無限等待
  • 提供完成通知機制
  • 適用於異步操作的同步控制
使用場景:
  • 等待異步 I/O 操作完成
  • 執行緒間的同步控制
  • 等待長時間運行任務完成
  • 資源準備完成的等待
使用範例:
// 基本使用範例 - 異步任務等待
class AsyncTaskWaiter : public ufm::util::CompletionWaiter {
private:
bool taskCompleted;
std::string result;
public:
AsyncTaskWaiter() : taskCompleted(false) {}
// 啟動異步任務
void startTask() {
taskCompleted = false;
// 模擬在另一個執行緒中執行任務
std::thread([this]() {
// 模擬長時間運行的任務
std::this_thread::sleep_for(std::chrono::seconds(2));
// 任務完成,設置結果
result = "Task completed successfully";
taskCompleted = true;
// 通知等待者任務完成
notify();
}).detach();
}
std::string getResult() const {
return result;
}
bool isCompleted() const {
return taskCompleted;
}
};
// 使用異步任務等待器
AsyncTaskWaiter taskWaiter;
// 啟動異步任務
std::cout << "開始執行異步任務..." << std::endl;
taskWaiter.startTask();
// 等待任務完成(設置 5 秒超時)
bool success = taskWaiter.waitDone(5000);
if (success) {
std::cout << "任務完成: " << taskWaiter.getResult() << std::endl;
} else {
std::cout << "等待超時或任務失敗" << std::endl;
}
// 無限等待範例
class CriticalTaskWaiter : public ufm::util::CompletionWaiter {
private:
volatile bool isReady;
public:
CriticalTaskWaiter() : isReady(false) {}
void performCriticalTask() {
isReady = false;
// 模擬關鍵任務
std::thread([this]() {
// 模擬複雜的初始化過程
for (int i = 0; i < 10; ++i) {
std::this_thread::sleep_for(std::chrono::milliseconds(200));
std::cout << "初始化進度: " << (i + 1) * 10 << "%" << std::endl;
}
isReady = true;
notify(); // 通知等待完成
}).detach();
}
bool isSystemReady() const {
return isReady;
}
};
// 關鍵系統初始化
CriticalTaskWaiter systemWaiter;
systemWaiter.performCriticalTask();
// 無限等待系統準備完成
std::cout << "等待系統初始化完成..." << std::endl;
if (systemWaiter.waitDone()) {
std::cout << "系統初始化完成,可以開始工作" << std::endl;
}
// 文件下載等待器範例
class FileDownloadWaiter : public ufm::util::CompletionWaiter {
private:
std::string fileName;
size_t fileSize;
bool downloadSuccess;
public:
FileDownloadWaiter(const std::string& file)
: fileName(file), fileSize(0), downloadSuccess(false) {}
void startDownload() {
downloadSuccess = false;
std::thread([this]() {
// 模擬文件下載過程
std::cout << "開始下載文件: " << fileName << std::endl;
// 模擬下載進度
for (int progress = 0; progress <= 100; progress += 10) {
std::this_thread::sleep_for(std::chrono::milliseconds(100));
std::cout << "下載進度: " << progress << "%" << std::endl;
}
// 模擬下載完成
fileSize = 1024 * 1024; // 1MB
downloadSuccess = true;
std::cout << "文件下載完成" << std::endl;
notify();
}).detach();
}
bool isDownloadSuccessful() const {
return downloadSuccess;
}
size_t getFileSize() const {
return fileSize;
}
};
// 使用文件下載等待器
FileDownloadWaiter downloader("important_file.zip");
downloader.startDownload();
// 等待下載完成(10 秒超時)
if (downloader.waitDone(10000)) {
if (downloader.isDownloadSuccessful()) {
std::cout << "下載成功,文件大小: "
<< downloader.getFileSize() << " bytes" << std::endl;
}
} else {
std::cout << "下載超時" << std::endl;
}
完成等待器,提供異步操作的同步等待機制。
Definition CompletionWaiter.h:206
參閱
ufm::lang::Object
ufm::sys::Thread
1.0.0

建構子與解構子說明文件

◆ CompletionWaiter()

ufm::util::CompletionWaiter::CompletionWaiter ( void )

建構完成等待器物件

初始化等待器並設置內部狀態,準備用於等待操作完成。

◆ ~CompletionWaiter()

virtual ufm::util::CompletionWaiter::~CompletionWaiter ( void )
overridevirtual

解構完成等待器物件

釋放與等待器相關的所有資源。

函式成員說明文件

◆ notify()

void ufm::util::CompletionWaiter::notify ( void )
protected

通知等待完成

向等待中的執行緒發送完成信號,解除其阻塞狀態。 子類別應在操作完成時呼叫此方法。

◆ waitDone() [1/2]

bool ufm::util::CompletionWaiter::waitDone ( int timeout)

等待操作完成(含超時控制)

阻塞當前執行緒直到操作完成或達到超時時間。

參數
timeout等待超時時間(毫秒),0 表示無限等待
傳回值
true 操作成功完成,false 等待超時或操作失敗

◆ waitDone() [2/2]

bool ufm::util::CompletionWaiter::waitDone ( void )
inline

等待操作完成(無超時限制)

無限期阻塞當前執行緒直到操作完成。

傳回值
true 操作成功完成,false 操作失敗

此類別(class) 文件是由下列檔案中產生: