程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 類成員函數作為 pthread

類成員函數作為 pthread

編輯:關於C語言
 

花了三個工作日把原來寫的一段通信守護進程代碼從過程方法改到了 template class,對於 template 的使用和類的派生明白了不少道理。還有個很受啟發的一點,就是 C++ 中如何使用類的成員函數作為創建線程的開始函數。
pthread_create 是 POSIX 標准下創建線程的函數,函數原型是:
int pthread_create(pthread_t *thread, pthread_attr_t *attr, void*(*start_routine)(void *), void *arg);

在 C 中,這個函數使用很簡單,只要定義一個參數和返回值均為 void * 類型的函數,使用函數名字作為參數即可。就算不完全符合,可以使用 (void *(*)(void *)) 將其強制轉換為符合類型檢查規格的函數指針。但是,類的非靜態成員函數隱含 this 指針作為第一個參數,所以參數完全不可能轉化為 void * 類型,而 C++ 的類型檢查要比 C 嚴格許多。由於我原來寫的代碼是 C 風格的,自然不會出現類型不符的問題,現在將線程開始函數封裝到一個模板類中,再創建線程的時候就不能滿足需要了。

在試了幾種轉換無效之後,從網上搜到一種方法:定義線程開始函數為類的靜態成員函數(static member function),這樣就不隱含 this 指針了,然後將 this 指針從 pthread_create 最後一個參數傳給開始函數,在函數中將 void * 類型的 this 指針強制轉換為類指針。看來靜態成員函數還是有些妙用的。

===================我叫分割線===================

帶著我媽和我妹在北京城裡轉悠了幾天,累得不行。主要原因在我,沒有考慮到身體因素,連著玩消耗太大,再加上自己也沒車沒房,倒公交車和住賓館也要走很遠,費時間又費勁。我都快受不了了,別說我媽了。以後再出去旅游,堅決不會再連著轉三天以上,要麼緊緊張張地玩兩天,要麼就花時間長點兒,走走歇歇。唉,誰讓咱是窮人呢,又有錢又有閒的日子還沒過上呢!

今天看了下積壓很久的博客訂閱,同學裡開始寫和繼續寫的人越來越多了。覺得有些文章比較陰沉低迷,因為自己從大三開始心情就老是跌宕起伏,反而在面對這許多次的分別聚首時坦然一些。要不是周熹在散伙飯時候專門招我,也不會哭得那麼厲害。散了散了散了吧,沒有離別,怎麼會有重逢呢?

還是在 Yourui 的博客上看到小恪去新疆的消息,要是當面看到他,肯定會玩笑說發配三千裡伊犁充軍去了。這在邊關待了兩年之後,再回來學積分拓撲之類的數學還能看得下去嗎?都說是命運無常,旅途坎坷卻能看更美風景,只是不知道那關外還是不是大漠孤煙長河落日的大西北?

剛才去吃飯,走在晚間暖暖的懶洋洋的空氣中,忽然有點兒秋天的感覺。想起 7 年前爸爸送我到商丘一高上學的情景,日子可真快啊!老了,老了!

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved