青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

WIN32線程控制主要實現線程的創建、終止、掛起和恢復等操作,這些操作都依賴于WIN32提供的一組API和具體編譯器的C運行時庫函數。
  WIN32線程控制主要實現線程的創建、終止、掛起和恢復等操作,這些操作都依賴于WIN32提供的一組API和具體編譯器的C運行時庫函數。

  1.線程函數

  在啟動一個線程之前,必須為線程編寫一個全局的線程函數,這個線程函數接受一個32位的LPVOID作為參數,返回一個UINT,線程函數的結構為:

UINT ThreadFunction(LPVOID pParam)
{
 //線程處理代碼
 return0;
}

  在線程處理代碼部分通常包括一個死循環,該循環中先等待某事情的發生,再處理相關的工作:

while(1)
{
 WaitForSingleObject(…,…);//或WaitForMultipleObjects(…)
 //Do something
}

  一般來說,C++的類成員函數不能作為線程函數。這是因為在類中定義的成員函數,編譯器會給其加上this指針。請看下列程序:

#include "windows.h"
#include <process.h>
class ExampleTask
{
 public:
  void taskmain(LPVOID param);
  void StartTask();
};
void ExampleTask::taskmain(LPVOID param)
{}

void ExampleTask::StartTask()
{
 _beginthread(taskmain,0,NULL);
}

int main(int argc, char* argv[])
{
 ExampleTask realTimeTask;
 realTimeTask.StartTask();
 return 0;
}

  程序編譯時出現如下錯誤:

error C2664: '_beginthread' : cannot convert parameter 1 from 'void (void *)' to 'void (__cdecl *)(void *)'
None of the functions with this name in scope match the target type

  再看下列程序:

#include "windows.h"
#include <process.h>
class ExampleTask
{
 public:
  void taskmain(LPVOID param);
};

void ExampleTask::taskmain(LPVOID param)
{}

int main(int argc, char* argv[])
{
 ExampleTask realTimeTask;
 _beginthread(ExampleTask::taskmain,0,NULL);
 return 0;
}

  程序編譯時會出錯:

error C2664: '_beginthread' : cannot convert parameter 1 from 'void (void *)' to 'void (__cdecl *)(void *)'
None of the functions with this name in scope match the target type

  如果一定要以類成員函數作為線程函數,通常有如下解決方案:

  (1)將該成員函數聲明為static類型,去掉this指針;

  我們將上述二個程序改變為:

#include "windows.h"
#include <process.h>
class ExampleTask
{
 public:
  void static taskmain(LPVOID param);
  void StartTask();
};

void ExampleTask::taskmain(LPVOID param)
{}

void ExampleTask::StartTask()
{
 _beginthread(taskmain,0,NULL);
}

int main(int argc, char* argv[])
{
 ExampleTask realTimeTask;
 realTimeTask.StartTask();
 return 0;
}

#include "windows.h"
#include <process.h>
class ExampleTask
{
 public:
  void static taskmain(LPVOID param);
};

void ExampleTask::taskmain(LPVOID param)
{}

int main(int argc, char* argv[])
{
 _beginthread(ExampleTask::taskmain,0,NULL);
 return 0;
}

  均編譯通過。

  將成員函數聲明為靜態雖然可以解決作為線程函數的問題,但是它帶來了新的問題,那就是static成員函數只能訪問static成員。解決此問題的一種途徑是可以在調用類靜態成員函數(線程函數)時將this指針作為參數傳入,并在改線程函數中用強制類型轉換將this轉換成指向該類的指針,通過該指針訪問非靜態成員。

  (2)不定義類成員函數為線程函數,而將線程函數定義為類的友元函數。這樣,線程函數也可以有類成員函數同等的權限;

  我們將程序修改為:

#include "windows.h"
#include <process.h>
class ExampleTask
{
 public:
  friend void taskmain(LPVOID param);
  void StartTask();
};

void taskmain(LPVOID param)
{
 ExampleTask * pTaskMain = (ExampleTask *) param;
 //通過pTaskMain指針引用
}

void ExampleTask::StartTask()
{
 _beginthread(taskmain,0,this);
}
int main(int argc, char* argv[])
{
 ExampleTask realTimeTask;
 realTimeTask.StartTask();
 return 0;
}

  (3)可以對非靜態成員函數實現回調,并訪問非靜態成員,此法涉及到一些高級技巧,在此不再詳述。
Posted on 2006-11-18 14:20 艾凡赫 閱讀(740) 評論(0)  編輯 收藏 引用 所屬分類: 多線程
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久综合久久综合久久综合| 国产日韩欧美一区在线 | 欧美国产91| 欧美日韩综合在线| 国内外成人在线| 亚洲国产一区二区a毛片| 亚洲手机在线| 欧美激情中文字幕在线| 亚洲综合激情| 国产精品第13页| 艳妇臀荡乳欲伦亚洲一区| 裸体歌舞表演一区二区| 亚洲女人小视频在线观看| 国产一区视频在线观看免费| 欧美 日韩 国产一区二区在线视频| 亚洲视频狠狠| 欧美日韩国产综合在线| 亚洲精选中文字幕| 欧美激情视频网站| 欧美日韩综合另类| 另类春色校园亚洲| 欧美视频免费| 久久久久久国产精品一区| 亚洲少妇自拍| 在线观看欧美亚洲| 免费永久网站黄欧美| 久久人人爽爽爽人久久久| 黄色日韩网站| 日韩视频在线观看免费| 欧美日韩精品在线| 玖玖在线精品| 欧美网站在线观看| 亚洲一区视频在线观看视频| 亚洲美女淫视频| 红桃视频国产精品| 亚洲一区二区网站| 国产欧美一区二区精品性 | 国产日韩精品在线播放| 亚洲国产精品久久久久秋霞蜜臀| 久久久美女艺术照精彩视频福利播放| 亚洲午夜羞羞片| 国产欧美日本一区二区三区| 亚洲国产清纯| 激情久久婷婷| 亚洲人成网站色ww在线| 欧美aa在线视频| 国产伦精品一区二区三区免费| 亚洲主播在线| 欧美国产日本| 欧美福利一区| 欧美色网在线| 亚洲欧洲日本mm| 国产精品专区第二| 日韩一区二区精品| 国产一区二区精品久久99| 蜜臀av一级做a爰片久久| 国产精品卡一卡二卡三| 久久亚洲综合色| 国产欧美 在线欧美| 一区二区欧美精品| 激情成人中文字幕| 欧美中文字幕在线观看| 一区二区免费看| 久久人人精品| 激情欧美一区二区三区在线观看| 亚洲欧美日韩综合aⅴ视频| 亚洲福利专区| 亚洲一二三级电影| 午夜精品99久久免费| 欧美11—12娇小xxxx| 欧美大胆成人| 99国产精品久久久| 久久se精品一区二区| 久久精品国产一区二区电影| 欧美jizz19性欧美| 亚洲福利在线看| 国产亚洲aⅴaaaaaa毛片| 午夜免费日韩视频| 一区二区黄色| 国产精品电影网站| 欧美亚洲午夜视频在线观看| 亚洲四色影视在线观看| 国产精品久久久久av免费| 亚洲男同1069视频| 久久视频在线看| 最新日韩欧美| 麻豆精品在线视频| 玖玖玖国产精品| 最近看过的日韩成人| 欧美日韩国产不卡在线看| 在线视频亚洲| 久久久免费精品视频| 亚洲日本无吗高清不卡| 久久岛国电影| 亚洲手机视频| 精品成人在线视频| 欧美日韩国产va另类| 亚洲欧洲99久久| 亚洲二区视频| 欧美一区91| 欧美国产亚洲精品久久久8v| 中文精品一区二区三区| 美女在线一区二区| 亚洲一区二区欧美| 欧美日韩日日夜夜| 一区二区不卡在线视频 午夜欧美不卡在 | 欧美不卡高清| 亚洲午夜极品| 一区二区视频免费完整版观看| 欧美国产乱视频| 欧美在线视频在线播放完整版免费观看 | 久久国产精品色婷婷| 亚洲欧洲精品一区二区三区波多野1战4 | 老司机免费视频久久| 一本一本a久久| 国内久久婷婷综合| 欧美日韩一卡| 暖暖成人免费视频| 欧美伊人久久久久久久久影院| 亚洲在线播放| 亚洲精品欧美日韩| 在线观看日韩国产| 国产欧美日韩麻豆91| 欧美日本一区二区视频在线观看| 日韩视频中文字幕| 免费亚洲电影在线观看| 欧美一区二区三区四区夜夜大片| a4yy欧美一区二区三区| 一区一区视频| 国产一区二区久久久| 国产精品日韩电影| 久久资源在线| 日韩视频在线观看一区二区| 欧美成人精品在线观看| 久久视频免费观看| 久久成人精品视频| 亚洲精品视频一区二区三区| 黄色一区二区三区四区| 国产欧美精品在线观看| 国产精品视频久久| 国产精品欧美经典| 国产精品久久久免费| 国产精品久久久久久久久免费桃花| 欧美日韩另类国产亚洲欧美一级| 欧美国产精品人人做人人爱| 欧美成年人视频网站| 亚洲女同精品视频| 亚洲一区二区三区激情| 亚洲一区二区三区高清| 亚洲欧美精品一区| 午夜精品一区二区在线观看| 新片速递亚洲合集欧美合集| 欧美一级久久久| 久久精品综合一区| 亚洲视频精品| 午夜宅男久久久| 久久精品国产第一区二区三区| 久久激情视频久久| 美国三级日本三级久久99| 农村妇女精品| 欧美香蕉视频| 国产视频欧美视频| 精品成人乱色一区二区| 亚洲区第一页| 亚洲一级二级| 久久久久综合一区二区三区| 欧美ed2k| 日韩一级不卡| 欧美一区二区精品在线| 你懂的成人av| 国产精品久久久久999| 韩国亚洲精品| av不卡在线观看| 欧美一区二区三区的| 另类激情亚洲| 亚洲精品自在久久| 亚洲精品乱码久久久久久日本蜜臀| 一本色道久久综合亚洲精品婷婷| 亚洲欧美在线x视频| 免费亚洲婷婷| 国产精品亚洲欧美| 亚洲精品一区二区在线| 欧美在线免费看| 亚洲国产精品va在线看黑人| 亚洲小少妇裸体bbw| 欧美成在线观看| 国产日韩一区二区三区| 亚洲精品一区二区三区在线观看 | 亚洲欧美bt| 欧美在线短视频| 亚洲国产另类精品专区| 午夜亚洲一区| 欧美色网在线| 亚洲精选中文字幕| 美女精品网站| 性伦欧美刺激片在线观看| 欧美日韩亚洲一区二区三区四区 | 欧美精品午夜视频| 亚洲视屏一区| 欧美好吊妞视频|