亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

在單獨線程中執行對象成員函數

2019-11-17 05:13:47
字體:
來源:轉載
供稿:網友
問題的提出:

  實際上所有線程都是用來處理C函數的,而不是C++類成員函數。標準庫中提供一個API函數,這個函數以回調函數指針作為線程的執行代碼并在單獨的線程中調用回調函數。問題是在這樣的線程庫中不能創建執行對象成員函數的線程;只能使用普通的函數。因此,下列代碼是失敗的:

// 啟動線程庫函數的線程
int thr_create (void (*pf)(), void* PRm, thread_t* pth);#include "class1.h"int func (void *param )
{
thread_t t1;
// 下列調用導致編譯器錯誤: "Cannot convert ''void (class1::*)()'' to ''void (*)()''"
// 意思是不能轉換類型
return thr_create ( &class1::some_method, param, &t1);
}  函數thr_create()需要回調函數的地址,void* 作為地址參數被傳遞到回調函數,同時傳遞的參數還有thread_t變量的指針(有關回調函數和函數指針的概念參見VC知識庫中另外的文章)?! ∩厦娴拇a之所以編譯失敗是因為傳遞到thr_create()的第一個參數是類class1的成員函數指針,而不是普通函數指針。從概念上講,普通函數和類成員函數是兩個完全不同的事情。即使進行強制類型轉換也不行。那么如何解決這個問題呢?  方法一:使用靜態成員函數  第一個解決方法是使回調成員函數為靜態。因為靜態成員函數不帶隱含式參數“this”。因此,可以將其參數中的地址當作是普通函數的指針來使用。假如要從靜態成員函數中訪問對象的數據成員,顯式傳入對象的地址即可。例如:class Hack
{
private:
int x;
public:
int get_x();
static void func(Hack * pthis); // 靜態成員函數
void func2(); // 非靜態成員函數
};void Hack::func(Hack * pthis)
{
int y = pthis->get_x(); // 訪問對象的數據成員
}  這個方法在大多數情形下都能行得通,但有時候成員函數不能聲明為靜態,也就是說成員函數是虛函數或者正在使用不能修改的第三方類。碰到這種情況時,用方法一解決問題就比較難了。  方法二:處理非靜態成員函數  假設需要在單獨的線程中調用類Hack的非靜態成員函數func2()。不用直接傳遞成員函數的地址到thr_create(),聲明一個帶 void* 參數的普通函數intermediary(void*),然后調用它:void intermediary(void*);  接著創建一個結構,結構定義如下:strUCt A
{
Hack * p; //類對象指針
void (Hack::*pmf)(); // 成員函數指針
};  創建一個結構實例,用希望的對象地址和成員函數地址填充結構(有關具體的成員函數指針內容請參見VC知識庫中的其它文章)。A a; // 結構實例
Hack h; // 創建對象
//填充結構
a.p = & h;
a.pmf = &Hack::func2; // 取成員函數地址  現在回過頭來實現intermediary()函數:void intermediary(void* ptr)
{
 A* pa=static_cast < A* > (ptr); // 強制轉換 p 為 A*
 Hack* ph=pa->p; // 從A中析取Hack對象地址
 void (Hack::*pmf)()=pa->pmf; // 析取 ptr 到成員函數
 (ph->*pmf)(); // 調用成員函數
}  最后將intermediary()的地址傳遞到thr_create():thr_create (intermediary, (void*) &a, &t1 );  thr_create()調用函數intermediary()并將A的地址傳遞給它。intermediary()再從其指針參數中展開結構A并調用希望的成員函數。這種間接方式的處理可以安全地在單獨線程中啟動成員函數,即便是線程庫不支持成員函數。假如需要調用不同類的不同成員函數,可以將結構A轉換成類模板,將函數intermediary()轉換成函數模板。從而編譯器便會自動產生大多數樣板文件代碼。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品国产高清久久久久久| 久久久国产91| 综合欧美国产视频二区| 亚洲香蕉在线观看| 国产精品aaaa| 庆余年2免费日韩剧观看大牛| 97精品国产91久久久久久| 欧美性猛交xxxx| 国产亚洲人成a一在线v站| 毛片精品免费在线观看| 992tv在线成人免费观看| 国产91ⅴ在线精品免费观看| 青青草一区二区| 日韩av有码在线| 欧美电影电视剧在线观看| 高清一区二区三区日本久| 国产精品一区二区三| 日韩免费在线电影| 国内免费久久久久久久久久久| 国产精品免费视频久久久| 奇米一区二区三区四区久久| 亚洲免费视频观看| 欧美成人精品三级在线观看| 欧美日韩日本国产| 亚洲大胆人体av| 亚洲精品国产免费| 亚洲国产精品久久91精品| 欧美国产高跟鞋裸体秀xxxhd| 亚洲在线观看视频| 日韩成人在线播放| 中文字幕日韩精品在线观看| 国产精品日韩欧美大师| 久久99久久久久久久噜噜| 疯狂欧美牲乱大交777| 在线精品国产欧美| 亚洲精品白浆高清久久久久久| 久久国产精品99国产精| 在线成人免费网站| 美女999久久久精品视频| 国产婷婷成人久久av免费高清| 久久久久久国产精品三级玉女聊斋| 亚洲人午夜精品| 日产日韩在线亚洲欧美| 欧美激情一区二区三区高清视频| 欧美巨乳在线观看| 久久人人爽人人爽人人片av高请| 精品视频偷偷看在线观看| 国产精品高清免费在线观看| 欧美一区二区三区四区在线| 国产精品久久91| 国产日本欧美视频| 亚洲精品www久久久| 亚洲毛片在线看| 亚洲aa中文字幕| 国产精品国产福利国产秒拍| 日韩高清电影免费观看完整| 国产精品成av人在线视午夜片| 国产日韩欧美视频| 亚洲精品福利在线| 91国内精品久久| 国产日韩欧美91| 欧美性生交大片免网| 欧美视频在线视频| 国产精品揄拍500视频| 日韩成人中文字幕在线观看| 国产精品久久久久一区二区| 一道本无吗dⅴd在线播放一区| 亚洲天堂av在线免费观看| 久久精品夜夜夜夜夜久久| 色综合久综合久久综合久鬼88| 精品露脸国产偷人在视频| 久久久噜久噜久久综合| 亚洲成人精品久久| 欧美wwwwww| 亚洲欧美国产日韩天堂区| 亚洲精品网址在线观看| 中文字幕在线看视频国产欧美在线看完整| 成人激情视频小说免费下载| 日韩在线精品视频| 92看片淫黄大片欧美看国产片| 91免费人成网站在线观看18| 亚洲欧美日韩图片| 国产视频精品va久久久久久| 国语自产在线不卡| 热久久这里只有精品| 亚洲石原莉奈一区二区在线观看| 国产一区二区视频在线观看| 亚洲精品白浆高清久久久久久| 亚洲视频日韩精品| 国产精品成人一区二区三区吃奶| 国产成+人+综合+亚洲欧洲| 久久艹在线视频| 精品电影在线观看| 久久躁日日躁aaaaxxxx| 国产婷婷97碰碰久久人人蜜臀| 国产亚洲精品日韩| 日韩高清免费观看| 成人午夜高潮视频| 亚洲成年人在线| 97香蕉久久超级碰碰高清版| 国产精品永久免费| 欧美成人精品不卡视频在线观看| 亚洲精品视频二区| 美女少妇精品视频| 国产99久久精品一区二区永久免费| 欧美怡春院一区二区三区| 国产免费一区二区三区在线能观看| 国产一区二区动漫| 91高清视频在线免费观看| 国模吧一区二区三区| 色综合久久88色综合天天看泰| 国产精品老牛影院在线观看| 中文字幕在线观看日韩| 久久久国产在线视频| 久久99热这里只有精品国产| 久久精品91久久久久久再现| 欧美激情视频一区二区| 国产香蕉精品视频一区二区三区| 亚洲免费av片| 欧美国产中文字幕| 亚洲xxxx妇黄裸体| 国产精品久久久久免费a∨大胸| 欧美日本亚洲视频| 亚洲精品日韩欧美| 亚洲第一精品福利| 色播久久人人爽人人爽人人片视av| 97视频免费在线看| 亚洲精品视频二区| 国产精品久久二区| 久热精品视频在线观看一区| 91视频国产高清| 久久手机免费视频| 亚洲免费福利视频| 在线色欧美三级视频| 亚洲精品福利免费在线观看| 亚洲美女喷白浆| 中文欧美日本在线资源| 久久精品国产亚洲精品| 国产精品久久久久久久久久久不卡| 国产v综合v亚洲欧美久久| 久久成人精品一区二区三区| 亚洲最大的av网站| 欧美日韩另类视频| 日韩欧美一区二区三区| 欧美在线视频一区| 成人精品一区二区三区电影免费| 3344国产精品免费看| 91九色国产视频| 亚洲天堂网在线观看| 国产精品高清免费在线观看| 国产日产欧美精品| 国产综合福利在线| 欧美成人全部免费| 久久亚洲精品一区二区| 精品久久久久久久久久久久久| 欧美成aaa人片在线观看蜜臀| 日韩欧美国产中文字幕| 日韩亚洲欧美中文高清在线| 国产日本欧美在线观看| 日韩欧美主播在线| 国产一区二区三区直播精品电影| 日韩h在线观看| 国产精品偷伦免费视频观看的| 98视频在线噜噜噜国产|