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

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>
            一区二区成人精品| 香蕉久久一区二区不卡无毒影院| 免费视频亚洲| 蜜臀久久99精品久久久久久9| 久久久www| 免费久久99精品国产| 欧美激情一区二区在线| 欧美另类69精品久久久久9999| 欧美成人中文| 欧美系列精品| 韩国精品久久久999| 亚洲国产成人高清精品| 一区二区三区四区国产| 欧美一区二区三区免费在线看| 欧美专区福利在线| 欧美成年人视频网站欧美| 亚洲精品欧美| 亚洲免费久久| 久久不射网站| 欧美区视频在线观看| 国产欧美日韩一区二区三区在线观看 | 欧美在线影院| 欧美不卡三区| 亚洲免费视频一区二区| 老**午夜毛片一区二区三区| 欧美性一区二区| 亚洲国产精彩中文乱码av在线播放| 一区二区三区欧美在线| 麻豆精品网站| 亚洲一区二区三区国产| 欧美成人亚洲| 国产主播一区二区三区| 亚洲调教视频在线观看| 欧美成人免费全部| 午夜精品久久久久久久99热浪潮| 欧美二区在线观看| 国产在线视频欧美一区二区三区| 99热在线精品观看| 亚洲精品1区2区| 欧美亚洲视频| 亚洲国产精品va在线观看黑人| 在线亚洲欧美专区二区| 欧美不卡视频一区发布| 狠狠做深爱婷婷久久综合一区 | 欧美.日韩.国产.一区.二区| 国产精品久久福利| 亚洲免费av观看| 美女黄毛**国产精品啪啪| 亚洲综合精品一区二区| 欧美午夜在线一二页| 一区二区欧美亚洲| 亚洲国产va精品久久久不卡综合| 欧美有码在线视频| 国产欧美一区二区三区视频| 亚洲一区二区三区精品在线| 亚洲精品人人| 欧美日韩国产在线观看| 一区二区三区久久网| 亚洲精品系列| 欧美午夜久久久| 亚洲视屏一区| 亚洲视频第一页| 国产精品日韩久久久| 午夜视频在线观看一区| 一区二区三区日韩欧美精品| 国产精品xvideos88| 亚洲一区二区免费看| 国产精品99久久不卡二区| 国产精品成人午夜| 午夜精品久久久久久久久久久久| 亚洲一区中文字幕在线观看| 国产精品一区二区视频| 久久99伊人| 久久野战av| 99ri日韩精品视频| 一本色道精品久久一区二区三区| 欧美视频免费在线| 午夜精品在线看| 欧美伊人久久久久久久久影院 | 欧美日韩一卡二卡| 香蕉久久国产| 久久久久九九九| 亚洲精品久久| 亚洲视频一区二区在线观看| 国产日韩欧美综合精品| 欧美激情一区二区久久久| 欧美精品一线| 久久国产一区二区| 蜜臀99久久精品久久久久久软件| 99re热精品| 欧美在线观看www| 亚洲黄色有码视频| 亚洲午夜精品一区二区| 极品尤物av久久免费看| 91久久国产综合久久蜜月精品 | 日韩一区二区精品| 国产日韩精品电影| 亚洲国产合集| 国产一区二区久久| 亚洲人成精品久久久久| 国产视频观看一区| 亚洲精品在线免费| 精东粉嫩av免费一区二区三区| 亚洲精品黄网在线观看| 午夜精品国产精品大乳美女| 国内久久精品视频| 欧美日韩一区二区三区四区五区 | 免费欧美在线| 久久欧美肥婆一二区| 日韩网站在线观看| 国产精品久久久久999| 久久综合成人精品亚洲另类欧美| 欧美经典一区二区| 美日韩精品免费| 国产麻豆午夜三级精品| 国产欧美日韩精品在线| 亚洲国产日韩一级| 国产亚洲一级高清| avtt综合网| 日韩视频不卡中文| 榴莲视频成人在线观看| 久久成人18免费网站| 国产精品久久久久久久7电影| 亚洲国产毛片完整版| 亚洲动漫精品| 久久精品国产一区二区三区免费看| 在线一区免费观看| 欧美精品18videos性欧美| 欧美激情成人在线| 在线成人小视频| 久久国产夜色精品鲁鲁99| 久久成人精品视频| 国产精品视频免费观看www| 一区二区三区视频在线看| 日韩视频专区| 欧美日韩成人| 一区二区日韩免费看| 亚洲天堂偷拍| 国产精品国产亚洲精品看不卡15| 亚洲伦理一区| 亚洲一区二区三区免费视频| 欧美日韩国产综合视频在线观看中文| 欧美激情综合| 99精品欧美一区二区蜜桃免费| 99视频超级精品| 欧美一区午夜视频在线观看| 欧美一区二区成人| 91久久国产综合久久91精品网站| 亚洲视频欧美视频| 欧美视频一区在线观看| 亚洲欧洲在线观看| 亚洲精品免费一区二区三区| 欧美激情2020午夜免费观看| 亚洲九九精品| 亚洲欧美激情一区| 国产日本欧洲亚洲| 久久久精品动漫| 亚洲电影在线观看| 中文无字幕一区二区三区| 国产精品每日更新| 久久九九热re6这里有精品 | 亚洲三级视频| 欧美色网一区二区| 欧美在线观看一区| 欧美黄色一区| 亚洲欧美国产一区二区三区| 国产人妖伪娘一区91| 老司机67194精品线观看| 亚洲精品免费网站| 久久精品国产欧美激情| 91久久精品www人人做人人爽| 欧美三级欧美一级| 久久久久久久久一区二区| 亚洲靠逼com| 久久综合九色综合欧美就去吻| 91久久精品日日躁夜夜躁欧美 | 国产一区二区高清不卡| 欧美成人一品| 欧美一级电影久久| 亚洲精品久久久久久久久久久久 | 久久综合一区二区| 亚洲天堂偷拍| 亚洲韩国日本中文字幕| 国产精品一区久久久久| 欧美精选一区| 久久亚洲精品网站| 亚洲欧美一区在线| 999亚洲国产精| 欧美福利一区二区| 久久精品在线播放| 亚洲欧美高清| 亚洲精品在线观看免费| 国产亚洲一本大道中文在线| 欧美三级欧美一级| 欧美韩日一区| 久久综合精品一区| 久久久综合香蕉尹人综合网| 亚洲一区二区三区乱码aⅴ蜜桃女| 最近中文字幕日韩精品 | 亚洲精品国产精品国自产观看|