欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

定時器

阮建安2年前15瀏覽0評論

定時器?

#ifndef CTimer_hpp

#define CTimer_hpp

#include <stdio.h>

#include <functional>

#include <chrono>

#include <thread>

#include <atomic>

#include <mutex>

#include <string>

#include <condition_variable>

class CTimer

{

public:

CTimer(const std::string sTimerName = ""); //構造定時器,附帶名稱

~CTimer();

/**

開始運行定時器

@param msTime 延遲運行(單位ms)

@param task 任務函數接口

@param bLoop 是否循環(默認執行1次)

@param async 是否異步(默認異步)

@return true:已準備執行,否則失敗

*/

bool Start(unsigned int msTime, std::function<void()> task, bool bLoop = false, bool async = true);

/**

取消定時器,同步定時器無法取消(若任務代碼已執行則取消無效)

*/

void Cancel();

/**

同步執行一次

#這個接口感覺作用不大,暫時現實在這里

@param msTime 延遲時間(ms)

@param fun 函數接口或lambda代碼塊

@param args 參數

@return true:已準備執行,否則失敗

*/

template<typename callable, typename... arguments>

bool SyncOnce(int msTime, callable&& fun, arguments&&... args) {

std::function<typename std::result_of<callable(arguments...)>::type()> task(std::bind(std::forward<callable>(fun), std::forward<arguments>(args)...)); //綁定任務函數或lambda成function

return Start(msTime, task, false, false);

}

/**

異步執行一次任務

@param msTime 延遲及間隔時間

@param fun 函數接口或lambda代碼塊

@param args 參數

@return true:已準備執行,否則失敗

*/

template<typename callable, typename... arguments>

bool AsyncOnce(int msTime, callable&& fun, arguments&&... args) {

std::function<typename std::result_of<callable(arguments...)>::type()> task(std::bind(std::forward<callable>(fun), std::forward<arguments>(args)...));

return Start(msTime, task, false);

}

/**

異步執行一次任務(默認延遲1毫秒后執行)

@param fun 函數接口或lambda代碼塊

@param args 參數

@return true:已準備執行,否則失敗

*/

template<typename callable, typename... arguments>

bool AsyncOnce(callable&& fun, arguments&&... args) {

std::function<typename std::result_of<callable(arguments...)>::type()> task(std::bind(std::forward<callable>(fun), std::forward<arguments>(args)...));

return Start(1, task, false);

}

/**

異步循環執行任務

@param msTime 延遲及間隔時間

@param fun 函數接口或lambda代碼塊

@param args 參數

@return true:已準備執行,否則失敗

*/

template<typename callable, typename... arguments>

bool AsyncLoop(int msTime, callable&& fun, arguments&&... args) {

std::function<typename std::result_of<callable(arguments...)>::type()> task(std::bind(std::forward<callable>(fun), std::forward<arguments>(args)...));

return Start(msTime, task, true);

}

private:

void DeleteThread(); //刪除任務線程

public:

int m_nCount = 0; //循環次數

private:

std::string m_sName; //定時器名稱

std::atomic_bool m_bExpired; //裝載的任務是否已經過期

std::atomic_bool m_bTryExpired; //裝備讓已裝載的任務過期(標記)

std::atomic_bool m_bLoop; //是否循環

std::thread *m_Thread = nullptr;

std::mutex m_ThreadLock;

std::condition_variable_any m_ThreadCon;

};

java線程 定時器,定時器