boost重要庫編碼例項

2021-08-13 09:53:52 字數 3268 閱讀 9289

最近幾周沒有再繼續學習新的知識點,而是準備一些面試題。大家懂的。。。。

介紹請看另外一篇博文:

example1:

#include #include #include class shared

shared(const shared & other)

~shared()

shared & operator =(const shared & other)

};int main()

編譯:g++ -o test2 test2.cpp

執行結果:

[root@huawei test]# ./test2

ctor() called

ctor() called

dtor() called

dtor() called

介紹請看另一篇文章:

example2:

#include #include #include #include using namespace std;

using namespace boost;

void test_any()

catch (boost::bad_any_cast & ex)

}}int main()

編譯:g++ -o test4 test4.cpp

執行結果:

[root@huawei test]# ./test4 d

cast error:boost::bad_any_cast: failed conversion using boost::any_cast ss

cast error:boost::bad_any_cast: failed conversion using boost::any_cast

boost::thread類代表乙個執行執行緒(a thread of execution),就像std::fstream類代表乙個檔案一樣。預設建構函式建立乙個代表當前執行執行緒的乙個例項。過載建構函式則有乙個函式物件作為引數,該函式物件沒有實參(argument),也無返回值。過載的建構函式建立乙個新的執行緒,然後呼叫函式物件。

由於boost.threads採用了函式物件,而不是函式指標,因此函式物件攜帶執行緒要用到的資料是完全可以的。這種方法更加靈活,而且型別安全。如果再和相關的函式庫結合起來,比如boost.bind,這種方式可以讓你輕鬆地將任意多的資料傳遞給新建立的執行緒。

example3:

#include #include #include void hello()

int main()

編譯: g++ -o test5 test5.cpp -lpthread -lboost_thread

執行結果:

[root@huawei test]# ./test5

hello world, i'm a thread!

有執行緒就要想到執行緒同步:

boost.threads支援兩大型別的mutex:簡單mutex和遞迴mutex。

乙個執行緒有3種可能方法來鎖定mutex:

1. 等待並試圖對mutex加鎖,直到沒有其他執行緒鎖定mutex;

2. 試圖對mutex加鎖,並立即返回,如果其他執行緒鎖定了mutex;

3. 等待並試圖對mutex加鎖,直到沒有其他執行緒鎖定mutex或者直到規定的時間已過。

boost.threads允許你挑選最有效率的mutex。為此,boost.threads提供了6中型別的mutex,效率由高到低排列:boost::mutex,boost::try_mutex,boost::timed_mutex,boost::recursive_mutex,boost::recursive_try_mutex和boost::recursive_timed_mutex。

boost.threads提供scoped lock模式,防止死鎖。要構建乙個這種型別的鎖,需要傳遞乙個mutex引用,建構函式將鎖定mutex,析構函式將解鎖mutex

example4:

#include #include #include boost::mutex io_mutex;

struct count

void operator()()

}int id;

};int main(int argc, char* argv)

編譯:g++ -o test6 test6.cpp -lpthread -lboost_thread

執行結果:

[root@huawei test]# ./test6

2: 0

2: 1

1: 0

1: 1

1: 2

1: 3

1: 4

1: 5

1: 6

1: 7

1: 8

1: 9

2: 2

2: 3

2: 4

2: 5

2: 6

2: 7

2: 8

2: 9

介紹請看另外一篇博文:

example5:

#include #include #include boost::mutex io_mutex;

void count(int id)

}int main(int argc, char* argv)

編譯: g++ -o test7 test7.cpp -lpthread -lboost_thread

執行結果:

[root@huawei test]# ./test7

1: 0

1: 1

1: 2

1: 3

1: 4

1: 5

1: 6

1: 7

1: 8

1: 9

2: 0

2: 1

2: 2

2: 3

2: 4

2: 5

2: 6

2: 7

2: 8

對於boost的庫的實踐,在ise框架中使用了其他boost庫,併發程式設計庫中的特點,在c++11中也有類似做法。

boost庫下檔案處理庫 探索Boost檔案系統庫

c 語言 實際上是c 標準 最常見的問題之一是缺少定義明確的庫來幫助處理檔案系統查詢和操作。這種缺席導致程式設計師使用本機作業系統提供的應用程式介面 api 從而使 無法跨平台移植。考慮乙個簡單的情況 您需要確定檔案是否為目錄型別。在microsoft windows 平台中,可以通過呼叫windo...

準標準庫Boost

在c 中,庫的地位是非常高的。c 之父 bjarne stroustrup先生多次表示了設計庫來擴充功能要好過設計更多的語法的言論。現實中,c 的庫門類繁多,解決的問題也是極其廣泛,庫從輕量級到重量級的都有。不少都是讓人眼界大開,亦或是望而生嘆的思維傑作。由於庫的數量非常龐大,而且限於筆者水平,其中...

Boost庫 Serialization 發布資訊

this is the boost 1.32 serialization library.there are currently no known bugs.however,due to piler library quirks and or bugs,some tests fail.這是boost...