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

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 艾凡赫 閱讀(744) 評論(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>
            亚洲婷婷在线| 欧美精品成人在线| 裸体素人女欧美日韩| 夜夜嗨一区二区| 国产精品视频免费观看www| 免费人成网站在线观看欧美高清 | 久久久久欧美| 午夜精品福利电影| 亚洲小说欧美另类婷婷| 亚洲理伦在线| 亚洲免费av观看| 亚洲高清在线观看| 亚洲第一精品影视| 亚洲国产一区二区在线| 国产精品第一区| 国产精品国产三级国产普通话99| 欧美激情一区二区| 欧美日韩视频在线| 欧美日韩综合在线免费观看| 午夜视频精品| 久久成人免费日本黄色| 久久精品综合一区| 久久久精品国产一区二区三区| 欧美一级片一区| 一区二区欧美国产| 亚洲一区二区3| 午夜精品一区二区在线观看| 欧美在线日韩在线| 美女黄色成人网| 欧美精品久久天天躁| 欧美日韩日本视频| 国产日韩一区二区三区在线播放 | 国精产品99永久一区一区| 国产欧美一区二区三区国产幕精品| 国产精品国产三级国产aⅴ9色| 国产乱码精品一区二区三区五月婷| 国产美女扒开尿口久久久| 激情欧美国产欧美| 国产最新精品精品你懂的| 亚洲第一黄色网| 一区二区三区精密机械公司| 亚洲午夜av电影| 久久精品视频网| 亚洲精品欧美日韩| 性色av一区二区三区在线观看| 亚洲美女尤物影院| 亚洲一区不卡| 久久精品国产久精国产爱| 欧美激情第五页| 亚洲一区中文| 免费看精品久久片| 国产精品亚洲综合天堂夜夜| 亚洲国产精品一区| 羞羞色国产精品| 亚洲国产99| 亚洲欧美日韩国产精品| 男男成人高潮片免费网站| 欧美性开放视频| 国产无遮挡一区二区三区毛片日本| 永久久久久久| 久久激五月天综合精品| 亚洲欧洲日韩综合二区| 久久精品五月婷婷| 国产精品日韩精品| 夜夜嗨av色综合久久久综合网| 久久国产乱子精品免费女| 久久一日本道色综合久久| 9l国产精品久久久久麻豆| 久久综合伊人| 娇妻被交换粗又大又硬视频欧美| 中国av一区| 亚洲国产人成综合网站| 久久精品首页| 国产精品久久看| 中文久久乱码一区二区| 亚洲国产乱码最新视频| 久久精品免费| 国产亚洲综合精品| 欧美在线观看你懂的| 中日韩男男gay无套| 久久久亚洲人| 精品成人一区二区| 另类天堂av| 久久久91精品国产一区二区精品| 国产精品欧美日韩一区| 亚洲一区二区在线看| 最新日韩精品| 欧美日本视频在线| 一区二区三区国产在线| 亚洲三级免费观看| 久久久久久夜| 国产欧美欧洲在线观看| 欧美主播一区二区三区| 亚洲一区二区在线观看视频| 欧美视频一区二区三区| 亚洲一区二区三区在线| 亚洲无玛一区| 欧美午夜免费| 亚洲欧美日韩系列| 香蕉久久一区二区不卡无毒影院 | 久久这里有精品视频| 亚洲欧洲av一区二区| 亚洲一区欧美| 久久精品国产亚洲aⅴ| 国产精品久久久久久久久久三级| 中日韩美女免费视频网址在线观看 | 久久影院亚洲| 亚洲精品美女在线| 洋洋av久久久久久久一区| 女女同性精品视频| 亚洲午夜视频在线观看| 性欧美video另类hd性玩具| 国产一区二区三区成人欧美日韩在线观看 | 美女尤物久久精品| 99精品视频一区| 亚洲一区二区三区在线播放| 国产在线一区二区三区四区| 欧美激情一区二区在线| 国产精品v片在线观看不卡| 欧美~级网站不卡| 麻豆精品国产91久久久久久| 欧美精品一区二区三区蜜桃| 久久久久久电影| 国产精品狠色婷| 亚洲人成在线观看网站高清| 狠狠干狠狠久久| 亚洲尤物在线视频观看| 亚洲天堂成人在线观看| 欧美成人高清| 欧美高清视频www夜色资源网| 国产视频亚洲精品| 亚洲一区中文字幕在线观看| 亚洲一区二区三区四区中文| 欧美国产激情| 亚洲国产精品第一区二区| 136国产福利精品导航| 久久精品一区二区三区不卡| 欧美一区国产一区| 国产精品日韩专区| 亚洲一区二区三区四区在线观看 | 欧美日韩一区二区在线观看视频| 欧美激情一二区| 亚洲精品在线视频观看| 可以免费看不卡的av网站| 久久免费高清| 一区二区在线视频播放| 久久亚洲国产成人| 亚洲电影网站| 在线一区二区三区四区| 欧美日韩1区2区| 一区二区三区欧美视频| 欧美一区二区精美| 国产专区精品视频| 免费一级欧美片在线播放| 亚洲欧洲免费视频| 午夜欧美大尺度福利影院在线看| 国产日韩精品久久久| 久久久精彩视频| 欧美韩国在线| 在线视频精品一区| 国产毛片一区| 欧美中文字幕在线视频| 极品尤物一区二区三区| 欧美国产日韩亚洲一区| 欧美一级久久久| 久久国产直播| 免费观看在线综合色| 亚洲电影免费在线观看| 欧美激情综合五月色丁香小说| 美女精品国产| 欧美一级片一区| 国产一区二区三区最好精华液| 亚洲免费在线观看视频| 久久久久久日产精品| 亚洲第一精品夜夜躁人人躁| 欧美人成网站| 羞羞答答国产精品www一本| 欧美高清视频一区| 亚洲欧美日韩另类精品一区二区三区| 国产精品日日摸夜夜添夜夜av| 久久9热精品视频| 亚洲人体1000| 久久精品视频亚洲| 99视频热这里只有精品免费| 国产精品影片在线观看| 久久尤物视频| 亚洲午夜久久久| 男女精品网站| 欧美在线一二三区| 亚洲老板91色精品久久| 国产一区91| 欧美午夜电影网| 久久一区免费| 欧美在线视频导航| 一本一本久久a久久精品综合麻豆| 久久精品国产清高在天天线| 亚洲无限乱码一二三四麻| 亚洲激情在线观看| 一区二区亚洲精品| 国产在线观看精品一区二区三区|