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

首頁 > 編程 > C++ > 正文

C/C++ 多線程的學習心得總結

2020-01-26 16:02:30
字體:
來源:轉載
供稿:網友
個人覺得在學習多線程編程之前最好先了解進程和線程的關系, 然后在學習線程工作方式的過程中動手寫個(我是從抄開始的)多線程的小程序, 會對學習多線程有很大的幫助, 否則只有理論是很抽象的.

在學習多線程編程之前, 必須先知道什么是 線程函數, 線程函數就是另一個線程的入口函數. 默認情況下一個我們所寫的代碼都是只有一個線程的, 而這個線程的入口函數就是main() 函數, 這是系統默認的. 而我們創建的另一個線程也需要一個函數來進入, 這個函數就叫做線程函數.

在C/C++中, 可以調用 '運行期庫' 函數 _beginthreadex(...), 來創建一個線程, _beginthreadex(...)函數接受6個參數, 其中第3個參數要求傳入該線程的入口函數的地址(即:傳入線程函數的函數名+&即可), 其它的每個參數的意思可以在msdn或網上查一下, 入門的話其余參數全部傳0即可.

_beginthreadex(...)函數返回一個句柄, 就是新線程的句柄. 對于傳入的線程函數是有要求的, 線程函數必須返回 unsigned __stdcall 類型, 并且接受一個 void* 型參數, 函數的內容就可以自己定了.
先來段多線程的簡單代碼:
復制代碼 代碼如下:

#include<windows.h>
#include<process.h>
#include<iostream>
using namespace std;
bool stop;
unsigned Counter;
unsigned __stdcall thread(void*)
{
cout <<"In second thread..." <<endl;
while (!stop){
Sleep(200);
cout <<Counter++ <<" " <<flush;
}
//_endthreadex(0);
return 0;
}
int main()
{
HANDLE hThread;
unsigned int threadID;
stop = false;
cout <<"Creating second thread..." <<endl;
// Create the second thread.
hThread = (HANDLE)_beginthreadex(NULL, 0, &thread, NULL, 0, &threadID);
// Wait until second thread terminates. If you comment out the line
// below, Counter will not be correct because the thread has not
// terminated, and Counter most likely has not been incremented to
// 1000000 yet.
//WaitForSingleObject(hThread, INFINITE);
system("pause");
stop = true;
//cin >>stop;
cout <<"Counter is-> " <<Counter <<endl;
// Destroy the thread object.
CloseHandle(hThread);
system("pause");
return 0;
}

代碼是正確的, 復制粘貼到 Visual C++ 6.0 中, 即可編譯運行. 但是會發現 _beginthreadex(...) 函數未定義的編譯錯誤. 原因是因為我們的visual c++ 6.0 默認的是在單線程模式下編程, 如果需要進行多線程編程, 需要轉換一下編譯器的 '運行期庫' , 方法很簡單:
Project --> Settings --> C/C++ 中 選擇 Category 中的 Code generation , 然后在 Use run-time library 里面選含有Multithread的其中一個就可以了.
這時再編譯, 就可以通過了. 有了這個例子的函數, 現在應該已經入門了吧. 不過除了這個還有很多基礎知識要補上, 推薦通讀幾遍 <windows核心編程(第四版)> 的第6章.
實際上, 在不同的編譯環境下, _beginthreadex(...)函數可能會有不同的名稱, 但是它們都是對 windows函數 CreateThread(...) 的封裝, CreateThread(...)函數用來創建一個新的線程函數, CreateThread(...)函數同樣接受6個參數, 在類似 _beginthreadex(...)的函數中對其做了一些安全的處理, 如堆棧內存的申請等. 雖然可以用CreateThread函數來創建一個新的線程, 但是強烈建議使用 _beginthreadex(...)函數, 對于CreateThread 函數在<windows核心編程(第四版)>第6章中有很好的講解.
當一個線程的任務結束, 要退出時, 有四種方法:
1.線程函數返回(最好使用這種方法);
2.通過調用 _endthreadex()或 ExitThread()函數,線程將自行撤消(最好不要使用這種方法);
3.同一個進程或另一個進程中的線程調用 TerminateThread()函數(應該避免使用這種方法);
4.包含線程的進程終止運行(應該避免使用這種方法).
最好通過其入口函數的返回語句(即:return)來退出線程, 也可以通過調用 C/C++ '運行期庫'函數 _endthreadex()函數來退出, 還有兩種退出的方法, 都是類似的強制退出. 最好使用線程函數的返回語句(return)來退出線程, 只有這樣才能安全的回收該線程的處理器資源和內存資源. 而實際上 _endthreadex()函數和 _beginthreadex(...)函數一樣, 是封裝了windows函數 ExitThread(), 如果一定要強制退出線程, 那么強烈建議調用 _endthreadex() 函數, 這樣能安全的回收系統資源.

具體的 _beginthreadex(...)函數 和 _endthreadex()函數在<windows核心編程(第四版)>第6章中有很好的剖析. 同時還有兩個 _beginthread(...) 和 _endthread() 運行期庫函數, 也有講解.
windows還提供了一些庫函數用來獲得當前進程或者線程的句柄, 如 HANDLE GetCurrentProcess() 函數返回當前進程的句柄, HANDLE GetCurrentThread() 函數返回當前線程的句柄, 但是需要注意的是, 這些句柄都是 '偽句柄' , 即: 只在本進程和本線程內可用, 不可傳出取用.

如果需要在外部使用其它線程或進程的句柄, 則可以用 DuplicateHandle(...) 函數獲得其它進程或者線程的 '實句柄' , 該函數接受7個參數, 具體的用法可以查閱一下msdn和網絡. 需要注意的是, 在使用完 由DuplicateHandle(...) 函數獲得的句柄后, 需要使用 CloseHandle() 函數來關閉該句柄.
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情视频三区| 国产精品一区久久久| 久久久成人精品视频| 欧美视频不卡中文| 社区色欧美激情 | 日韩经典中文字幕在线观看| 成人夜晚看av| 18一19gay欧美视频网站| 亚洲欧美日韩天堂| 精品一区精品二区| 中国日韩欧美久久久久久久久| 最近中文字幕mv在线一区二区三区四区| 在线色欧美三级视频| 欧洲亚洲免费视频| 国产日产久久高清欧美一区| 中文字幕久久久av一区| 久久国产精品久久国产精品| 欧美国产日韩精品| 91国内免费在线视频| 亚洲美女自拍视频| 国产精品第三页| 国产亚洲a∨片在线观看| 国产精品亚洲美女av网站| 亚洲成av人片在线观看香蕉| 亚洲精品v天堂中文字幕| 狠狠色香婷婷久久亚洲精品| 亚洲黄色av女优在线观看| 欧美在线观看日本一区| 久久精品99久久久香蕉| 欧美亚洲午夜视频在线观看| 欧美精品日韩www.p站| 97在线视频免费看| 91精品国产91久久久久久不卡| 精品国产31久久久久久| 日韩国产在线播放| 成人黄色免费网站在线观看| 久久精品国产亚洲一区二区| 亚洲第五色综合网| 中文字幕亚洲在线| 91国在线精品国内播放| 91综合免费在线| 亚洲免费一在线| 亚洲精品在线观看www| 亚洲自拍偷拍色图| 最近2019好看的中文字幕免费| 国产精品极品美女粉嫩高清在线| 欧美另类交人妖| 91香蕉嫩草影院入口| 亚洲男人天堂九九视频| 亚洲精品之草原avav久久| 久久精品亚洲国产| 精品人伦一区二区三区蜜桃免费| 欧美天天综合色影久久精品| 一区二区三区精品99久久| 欧美高清在线视频观看不卡| 日本精品性网站在线观看| 亚洲男人天堂2019| 91亚洲一区精品| 国产a级全部精品| 午夜精品久久久久久久久久久久| 国产日韩av在线| 成人伊人精品色xxxx视频| 久久国产精品久久精品| 中文字幕日本精品| 欧美一级在线亚洲天堂| 97久久精品人搡人人玩| 性欧美暴力猛交69hd| 98视频在线噜噜噜国产| 欧美国产欧美亚洲国产日韩mv天天看完整| 成人写真视频福利网| 国产成人精品一区二区| 欧美成人免费视频| 伊人一区二区三区久久精品| 亚洲影院高清在线| 久久精品国产99国产精品澳门| 欧美老女人xx| 国产亚洲精品久久久久久| 国产网站欧美日韩免费精品在线观看| 色噜噜狠狠色综合网图区| 高清一区二区三区四区五区| 亚洲精品aⅴ中文字幕乱码| 欧美理论电影在线播放| 国产成人精品久久二区二区91| 国产成人精品av| 91精品久久久久久久久中文字幕| 成人激情视频在线播放| 欧洲日韩成人av| 国内精品小视频在线观看| 91网站免费看| 亚洲一区美女视频在线观看免费| 91社区国产高清| 成人黄色av免费在线观看| 精品一区二区亚洲| 日韩美女视频中文字幕| 欧洲亚洲免费在线| 亚洲视频电影图片偷拍一区| 日韩亚洲综合在线| 国产精品自产拍在线观看中文| 国产精品自产拍在线观看中文| 久久激情五月丁香伊人| 亚洲最大在线视频| 4438全国亚洲精品在线观看视频| 91最新在线免费观看| 日韩中文字幕免费视频| 国产精品久久一区主播| 欧美国产一区二区三区| 欧美日韩性视频| 精品偷拍各种wc美女嘘嘘| 91色精品视频在线| 欧美小视频在线观看| 亚洲成人av片在线观看| 亚洲第一av在线| 7m精品福利视频导航| 久久精品91久久香蕉加勒比| 欧美国产在线电影| 久久久久久久成人| 欧美性少妇18aaaa视频| 91视频国产一区| 亚洲精品中文字幕有码专区| 精品欧美激情精品一区| 欧美性受xxxx白人性爽| 国产精品成人免费视频| 日本精品视频网站| 91豆花精品一区| 91日韩在线播放| 国产一区二区黄| 国产视频丨精品|在线观看| 国内精品伊人久久| 色yeye香蕉凹凸一区二区av| 亚洲精品美女网站| 国产欧美韩国高清| 久久成人这里只有精品| 91视频国产精品| 国产精品高清免费在线观看| 韩国福利视频一区| 国产欧美精品xxxx另类| 亚洲网在线观看| 欧美激情国内偷拍| 成人黄色片网站| 久久中文字幕在线视频| 日韩中文字幕久久| 欧美激情精品久久久| 久久中文久久字幕| 成人中文字幕在线观看| 欧美电影电视剧在线观看| 孩xxxx性bbbb欧美| 日韩av综合网站| 色无极亚洲影院| 欧美亚洲视频在线看网址| 久久久成人精品视频| 91久久精品视频| 日韩精品久久久久久福利| 日韩免费视频在线观看| 91亚洲精品久久久久久久久久久久| 欧美在线性爱视频| 日韩美女视频免费在线观看| 在线观看亚洲区| 亚洲人成电影网站色www| 日韩免费av片在线观看| 国产精品r级在线| 亚洲欧美精品伊人久久| 亚洲激情在线观看视频免费| 精品一区电影国产| 国产成人一区二区三区小说|