class clthread
;#include #include "clthread.h"
#include "cllog.h"
using namespace std;
clthread::clthread()
clthread::~clthread()
clstatus clthread::run(void *pcontext)
return clstatus(0, 0);
}clstatus clthread::waitfordeath()
return clstatus(0, 0);
}void* clthread::startfunctionofthread(void *pthis)
clstatus clthread::runthreadfunction()
問題:
為什麼使用
static
函式?是因為在run方法中pthread_create的第三個引數服務
m_pcontext = pcontext;
int r = pthread_create(&m_threadid, 0, startfunctionofthread, this);
為什麼需要傳遞
this
指標?用來呼叫特定物件的runthreadfunction()方法
startfunctionofthread
是private
的,為什麼能夠被呼叫?
非靜態方法可以呼叫靜態方法
能否封裝變化點?
一:物件導向的封裝
class clthread
;
這裡講runthreadfunction降為子類中實現了。
二:基於模板的物件導向的封裝
這裡講runthreadfunction降為子類中實現了。
templateclass clthread
~clthread(){}
clstatus run(void *pcontext = 0)
return clstatus(0, 0);
} clstatus waitfordeath()
return clstatus(0, 0);
}private:
static void* startfunctionofthread(void *pcontext)
clstatus runthreadfunction()
protected:
void *m_pcontext;
pthread_t m_threadid;
};
呼叫時
class clmythread : public clthread
};int main()
這裡用到了基於模板的靜態多型。
linux C執行緒雜記
以前學作業系統的程序和執行緒管理時,經常聽到互斥加鎖解鎖之類的概念,但是幾乎很少在程式設計中用到,今天看 gnu linux程式設計 的執行緒這章時,對c程式中如何給變數加鎖解鎖有了乙個大致的了解,現記錄如下 互斥其實是保證執行緒在關鍵區正常執行的變數,同一時刻只能由某一程序訪問,要建立乙個關鍵區,...
Linux c 執行緒入門
include include include include include void print msg1 void void print msg2 void void thread create pthread t thread 2 int main void print msg1 int f...
Linux C程序 執行緒
1 程序間通訊 庫 在使用者空間是不可能實現程序通訊,可通過linux核心建立物件來通訊 pid t pid 程序號的型別定義 pid fork 建立程序 if pid 0 子程序 if pid 1 父程序 2 執行緒間通訊 庫 在使用者空間可以實現執行緒間通訊,通過全域性變數通訊 pthread ...