std與boost執行緒的一點區別,自定義執行緒介面類

2021-08-26 20:26:28 字數 1961 閱讀 3304

boost有interrupt()函式,可以直接打斷終止,可以打斷sleep。

std的沒有interrupt(),只能jion,不能打斷sleep。

boost自定義執行緒介面

要安裝boost庫,包含標頭檔案和lib,還要鏈結

cmakelists.txt檔案如下

cmake_minimum_required(version 2.8)

set(cmake_cxx_flags "$ -wall -pthread -m64 -std=c++11 -fpic -fno-strict-aliasing")

project(test2)

#包含lib資料夾

link_directories("/root/soft/boost_1_67_0/lib")

#包含頭資料夾

include_directories("." "/root/soft/boost_1_67_0/")

add_executable($ "main.cpp" )

#鏈結用到的庫

#include#include#include#include//#include//執行緒介面類,重寫run函式,改變睡眠時間 sleep_ms

class base_thread//:public boost::enable_shared_from_this

virtual ~base_thread(){}

/*** @brief 啟動執行緒

*/void start()

/*** @brief 終止執行緒

*/void stop()

///執行緒睡眠時間 毫秒

std::atomicsleep_ms;

protected:

/// 互斥量

std::mutex _mutex;

/*** @brief 執行緒函式

*/virtual void run(){}

private:

/// 執行緒控制代碼

boost::thread _thread_handler;

/// 執行緒標誌

std::atomic_thread_flag;

void thread_proc()

catch (boost::thread_interrupted&)

class thread_impl: public base_thread

protected:

void run()

{std::cout << "get_id: "<< boost::this_thread::get_id()

<< " 過了多少秒: "<< elapse_seconds(start_time)

<

get_id: 140737337173760  過了多少秒: 0  thread_impl  th1

get_id: 140737328781056  過了多少秒: 0   thread_impl2  th2

get_id: 

thread_interrupted

get_id: 140737328781056  過了多少秒: 3   thread_impl2  th2

get_id: 140737328781056  過了多少秒: 6   thread_impl2  th2

get_id: 140737328781056  過了多少秒: 9   thread_impl2  th2

const與define的一點區別

觀察下列兩種寫法有什麼區別 define pint int typedef int sint 首先我們有乙個需要注意 define 巨集常量是在預編譯階段進行簡單替換。對typedef而言,typedef 的真正意思是給乙個已經存在的 資料型別 注意 是型別不是變數 取乙個別 名,而非定義乙個新的資...

關於執行緒的一點補充

public class startdead extends thread public static void main string args 不要對處於死亡狀態的執行緒呼叫start 方法,程式只能對新建狀態的執行緒呼叫start 方法 對於新建狀態的執行緒兩次呼叫start 方法也是錯誤的,...

多執行緒的一點想法

一直被多種途徑告之多執行緒是個好東西,很好很好,一定要會。但是它到底是怎樣的?如何去用?卻一直不慎了解。最近通過解決c ui卡死這個問題,對多執行緒有了一點感覺。打個比喻吧。中秋快來了,你提著大包小包去趕車回家,這個時候你感覺負擔很大很累走不動,然後你請了兩個樵夫來幫你提東西,現在你輕鬆了。但是到了...