- -。(583214826) 12:07:52
誰(shuí)能給我講一下vc++多線程,幾分鐘就搞定
- -。(583214826) 12:08:06
誰(shuí)能給我講一下vc++多線程,幾分鐘就搞定, 多謝大神們,真的很急
misora<chriscross@qq.com> 12:08:41
這個(gè)太廣泛了。。
- -。(583214826) 12:09:03
創(chuàng)建一個(gè)線程,可以隨時(shí)啟用,就ok了
- -。(583214826) 12:10:06
親們,幫幫我吧
misora<chriscross@qq.com> 12:10:24
_beginthreadex
- -。(583214826) 12:10:41
有沒(méi)有比較完整一些的代碼
misora<chriscross@qq.com> 12:10:46
沒(méi)有
- -。(583214826) 12:10:59
_begininthreadex是個(gè)方法?
misora<chriscross@qq.com> 12:11:10
就是開(kāi)始一個(gè)線程
- -。(583214826) 12:11:46
哦
杯水車薪(1729751029) 12:18:11
無(wú)線上網(wǎng)卡 和 無(wú)線網(wǎng)卡是2種不同的東東. 現(xiàn)在都亂套了
- -。(583214826) 12:18:36
...
上海-千層(670825328) 12:19:17

?????????????????還有這樣提需求的?
如果有人說(shuō):誰(shuí)給我一套房,200元搞定,這個(gè)可笑吧
杯水車薪(1729751029) 12:19:31
d}%[_ajg`@apb.gif)
上海-千層(670825328) 12:20:45
需求定了,時(shí)間成本就已被決定了.
泥翹(694820778) 12:22:49
什么東西都等著別人給你來(lái)講
杯水車薪(1729751029) 12:23:16

泥翹(694820778) 12:23:45
- -。(583214826) 12:28:02
]hwgbpti@5d.jpg)
- -。(583214826) 12:28:13
時(shí)間跟錢不一樣好嗎
杯水車薪(1729751029) 12:30:35
不是吧,昨天老師還說(shuō)時(shí)間就是金錢
- -。(583214826) 12:30:49
好吧隨便吧
杯水車薪(1729751029) 12:31:04
要么可能今天不是了
杯水車薪(1729751029) 12:32:23
不過(guò),我學(xué)多線程學(xué)了一周才會(huì)用好.好久以后才明白怎么才能不讓程序崩潰
- -。(583214826) 12:33:47
很多語(yǔ)言的線程我都學(xué)過(guò),唯獨(dú)vc++不會(huì),其實(shí)5行代碼就可以解決運(yùn)行一個(gè)線程,關(guān)鍵我不會(huì)寫(xiě)啊,求高人指點(diǎn)。
武漢-Error<errorcpp@qq.com> 12:34:40
- -。(583214826) 12:33:47
很多語(yǔ)言的線程我都學(xué)過(guò),唯獨(dú)vc++不會(huì),其實(shí)5行代碼就可以解決運(yùn)行一個(gè)線程,關(guān)鍵我不會(huì)寫(xiě)啊,求高人指點(diǎn)。
就憑你這句話
武漢-Error<errorcpp@qq.com> 12:34:44
沒(méi)必要在這里問(wèn)
- -。(583214826) 12:34:57
...
- -。(583214826) 12:35:06
我就是問(wèn)一下,還引起公憤了
- -。(583214826) 12:35:07
- -
- -。(583214826) 12:35:12
求高人指點(diǎn)
武漢-Error<errorcpp@qq.com> 12:35:15
5分鐘夠你在msdn找到api了
- -。(583214826) 12:35:49
有高手給寫(xiě)個(gè)簡(jiǎn)單易懂的豈不是更好
杯水車薪(1729751029) 12:36:53
貌似msdn也是高手所寫(xiě),msdn中也有簡(jiǎn)單易懂的例子
- -。(583214826) 12:37:09
那你們?nèi)フ野伞?br />- -。(583214826) 12:37:13
求高人指點(diǎn)
杯水車薪(1729751029) 12:37:24
不過(guò),用VC的多線程和其它語(yǔ)言的是很大不同地。
- -。(583214826) 12:37:32
嗯,明白
武漢-Error<errorcpp@qq.com> 12:37:37
哥給你找個(gè),估計(jì)你不會(huì)用
唉,,,
- -。(583214826) 12:37:48
那你給我找個(gè)吧,麻煩你了
杯水車薪(1729751029) 12:37:49
其它語(yǔ)言地學(xué)會(huì)了,到了VC這里,仍然等于初學(xué)者
上海-千層(670825328) 12:39:07
根據(jù)我的分析,這里分2類人,一類的不會(huì)的,在此忽悠人。
另一類的學(xué)會(huì)了,當(dāng)初學(xué)得很費(fèi)力,所以今天看到另一個(gè)
不會(huì)的,只感到高興
武漢-Error<errorcpp@qq.com> 12:39:28
不是,他問(wèn)問(wèn)題的態(tài)度 我很難接受
- -。(583214826) 12:39:34
還有一類,就是吃飽了沒(méi)事干在這評(píng)論問(wèn)題的
上海-千層(670825328) 12:39:38
唉。一切的罪都在多線程太難。不能怪任何人
武漢-Error<errorcpp@qq.com> 12:39:52
用boost::thead
- -。(583214826) 12:40:03
我的態(tài)度沒(méi)那么不好吧? - -
上海-千層(670825328) 12:40:39

向他推薦用boost的,看來(lái)屬于第4類了。
武漢-Error<errorcpp@qq.com> 12:41:12
裝逼的
上海-千層(670825328) 12:41:14
唉。只能說(shuō),咱群雖小,品種卻多。
- -。(583214826) 12:41:29

你是不是大姨媽來(lái)了?
- -。(583214826) 12:41:50
你要真覺(jué)著沒(méi)事干可以去看看書(shū)什么的
- -。(583214826) 12:41:57
知識(shí)是無(wú)邊的。你怎么也學(xué)不完
上海-千層(670825328) 12:42:08
你是不是沒(méi)錢去按摩啊
武漢-Error<errorcpp@qq.com> 12:42:12
問(wèn)問(wèn)題的還是少評(píng)論,,,
上海-千層(670825328) 12:42:17
這么興奮
- -。(583214826) 12:42:28
我不興奮,看你吃太多了,我關(guān)心一下
上海-千層(670825328) 12:43:12
只是娛樂(lè)一下罷了。你還有啥不開(kāi)心的,也說(shuō)說(shuō)讓咱開(kāi)心一下
武漢-Error<errorcpp@qq.com> 12:43:33
這小伙應(yīng)該不是C系程序員
杯水車薪(1729751029) 12:43:33

- -。(583214826) 12:43:40
我跟你那誰(shuí)有一腿了。不好意思
- -。(583214826) 12:43:46
我不是學(xué)c++的
杯水車薪(1729751029) 12:44:17
不是啊
杯水車薪(1729751029) 12:44:31
來(lái)錯(cuò)群了。怪不得成了娛樂(lè)。
- -。(583214826) 12:45:10
哦,你們很不喜歡不會(huì)c++的人啊
- -。(583214826) 12:45:16
好吧
杯水車薪(1729751029) 12:45:20
喜歡
杯水車薪(1729751029) 12:45:48
C++的人很少娛樂(lè)的。
武漢-Error<errorcpp@qq.com> 12:46:13
相對(duì)還是很open的
上海-千層(670825328) 12:46:14
6K)L)]~VIZK.gif)
上海-千層(670825328) 12:47:04
看把他急的,這一腿那一腿都說(shuō)出來(lái)了。快崩潰了。
看來(lái)他本身就不是多線程的。
武漢-Error<errorcpp@qq.com> 12:47:19
#include <iostream>
using namespace std;
#include <boost/thread.hpp>
void TestFunc()
{
cout << __FUNCTION__ << endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
boost::thread threadTest(&TestFunc);
threadTest.join();
getchar();
return 0;
}
武漢-Error<errorcpp@qq.com> 12:47:25
沒(méi)編譯
杯水車薪(1729751029) 12:47:23

武漢-Error<errorcpp@qq.com> 12:47:31
不過(guò)應(yīng)該沒(méi)問(wèn)題的
- -。(583214826) 12:47:36
謝謝高手,比某人強(qiáng)很多
武漢-Error<errorcpp@qq.com> 12:47:43
我是水貨
武漢-Error<errorcpp@qq.com> 12:47:51
高手不會(huì)回答這么簡(jiǎn)單的問(wèn)題的
武漢-Error<errorcpp@qq.com> 12:47:55
尤其你這種態(tài)度
武漢-Error<errorcpp@qq.com> 12:48:04
我敢說(shuō) 在C++群 絕對(duì)混不開(kāi)
武漢-Error<errorcpp@qq.com> 12:48:18
除非你在其他方面很牛
- -。(583214826) 12:48:52
我態(tài)度也沒(méi)怎么不好啊,我只是解釋一下我能很快接受高手給講得東西罷了
- -。(583214826) 12:49:09
要不然你看看聊天記錄- -
杯水車薪(1729751029) 12:49:09
武漢-Error,這樣答題,什么也不會(huì)解決。他仍然不會(huì),相信boost是需要安裝的,所以他也用不成
- -。(583214826) 12:49:28
我試試吧,不行再解決
游戲開(kāi)發(fā)者(2528395832) 12:49:34
推薦你找好工作 只要你上CG游戲人才網(wǎng):http://www.cggamejob.com注冊(cè)個(gè)人會(huì)員, 就能幫你實(shí)現(xiàn)就業(yè) 最新職位招聘::3D角色 場(chǎng)景 特效 動(dòng)作 影視動(dòng)畫(huà) 美術(shù) 程序、策劃、數(shù)值 市場(chǎng) 運(yùn)營(yíng)等.
武漢-Error<errorcpp@qq.com> 12:49:42
- -。(583214826) 12:48:52
我態(tài)度也沒(méi)怎么不好啊,我只是解釋一下我能很快接受高手給講得東西罷了
C++er 從來(lái)不信速成
杯水車薪(1729751029) 12:49:41
他還得再提問(wèn)
武漢-Error<errorcpp@qq.com> 12:50:11
合格的C++er 都是被編譯器摧殘蹂躪出來(lái)的
- -。(583214826) 12:50:14
就算我信了速成也不能說(shuō)我態(tài)度不好吧 - -,我很誠(chéng)懇艾。。
武漢-Error<errorcpp@qq.com> 12:50:23
誠(chéng)懇個(gè)屁
杯水車薪(1729751029) 12:50:24
你開(kāi)了頭,要是不幫他完全解決,反可能成為不耐心的人。
- -。(583214826) 12:50:36
...
- -。(583214826) 12:50:37
好吧
武漢-Error<errorcpp@qq.com> 12:50:49
囧,,,
- -。(583214826) 12:50:57
小弟認(rèn)錯(cuò)了
武漢-Error<errorcpp@qq.com> 12:51:10
error PRJ0003 : Error spawning 'cmd.exe'.
武漢-Error<errorcpp@qq.com> 12:51:13
誰(shuí)遇到過(guò)
- -。(583214826) 12:52:02
問(wèn)個(gè)問(wèn)題真困難
- -。(583214826) 12:52:03
唉
杯水車薪(1729751029) 12:52:37
可能原因恰在于你問(wèn)了一個(gè)過(guò)于簡(jiǎn)單的問(wèn)題
武漢-Error<errorcpp@qq.com> 12:52:52
太抽象了
- -。(583214826) 12:53:08
果然出問(wèn)題了
- -。(583214826) 12:53:21

- -。(583214826) 12:53:31
這是要添加外部文件吧?
杯水車薪(1729751029) 12:53:45
好,武漢人,可以繼續(xù)了。
- -。(583214826) 12:53:54
....
武漢-Error<errorcpp@qq.com> 12:54:24
QN1UH78VKP2T7)IA]ZM(FW.gif)
- -。(583214826) 12:54:36
不對(duì)
- -。(583214826) 12:54:47
是這樣
上海-千層(670825328) 12:54:51
用了boost你就掉進(jìn)了無(wú)底洞。
現(xiàn)在相信關(guān)于第4類人的理論了吧。
- -。(583214826) 12:55:09
我的程序要在標(biāo)準(zhǔn)win32平臺(tái)下運(yùn)行,不能帶其他的類庫(kù)
武漢-Error<errorcpp@qq.com> 12:55:12
聲明下,,,偶今天是裝逼來(lái)的,,,
武漢-Error<errorcpp@qq.com> 12:55:30
主要是不用boost 太麻煩了,要寫(xiě)好多代碼
- -。(583214826) 12:55:33
....
杯水車薪(1729751029) 12:55:26
d}%[_ajg`@apb.gif)
- -。(583214826) 12:55:42
createThread這個(gè)就行了吧
武漢-Error<errorcpp@qq.com> 12:55:59
- -。(583214826) 12:55:42
createThread這個(gè)就行了吧
簡(jiǎn)單的給你代碼 是害你,,,
- -。(583214826) 12:56:05
明白
武漢-Error<errorcpp@qq.com> 12:56:06
很多東西要注意的
武漢-Error<errorcpp@qq.com> 12:56:25
__beginthread
武漢-Error<errorcpp@qq.com> 12:56:27
用這個(gè)
武漢-Error<errorcpp@qq.com> 12:56:31
理由不解釋
- -。(583214826) 12:56:37
我查查
杯水車薪(1729751029) 12:57:08
用哪個(gè)函數(shù)他能不知道?一共就2個(gè)函數(shù)。msdn中推薦一個(gè)。
武漢-Error<errorcpp@qq.com> 12:57:20
上海-千層(670825328) 12:54:51
用了boost你就掉進(jìn)了無(wú)底洞。
現(xiàn)在相信關(guān)于第4類人的理論了吧。
千同學(xué)展開(kāi)來(lái)說(shuō)說(shuō)
武漢-Error<errorcpp@qq.com> 12:57:27
還有一會(huì)才上班呢
上海-千層(670825328) 12:57:37
真正的困難還沒(méi)看出來(lái)?困難在于要幾分鐘之內(nèi)。
杯水車薪(1729751029) 12:57:49
6K)L)]~VIZK.gif)
- -。(583214826) 12:58:01
呵呵,可惜沒(méi)人能帶著我搞一下
- -。(583214826) 12:58:07
自己搞當(dāng)然要花時(shí)間了
武漢-Error<errorcpp@qq.com> 12:58:08
QN1UH78VKP2T7)IA]ZM(FW.gif)
我不用boost 也要去查函數(shù),然后填api
上海-千層(670825328) 12:58:08
線程能有多少函數(shù)啊?
- -。(583214826) 12:58:09
親
杯水車薪(1729751029) 12:58:48
至此,武漢人是唯一回答過(guò)的人,請(qǐng)繼續(xù)吧
上海-千層(670825328) 12:59:39
別人花時(shí)間搞成功的,適用于所有情況的,恐怕只有boost了。
上海-千層(670825328) 13:00:01
好東東怕你吞不下去啊.
武漢-Error<errorcpp@qq.com> 13:00:04
我不是武漢人
武漢-Error<errorcpp@qq.com> 13:00:22
好吧
武漢-Error<errorcpp@qq.com> 13:00:25
第二版 給你
武漢-Error<errorcpp@qq.com> 13:00:27
#include <iostream>
using namespace std;
#include <boost/thread.hpp>
#include <Windows.h>
#include <process.h>
void TestFunc()
{
cout << __FUNCTION__ << endl;
}
void TestFuncWin( void *ch )
{
cout << __FUNCTION__ << endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
boost::thread threadTest(&TestFunc);
threadTest.join();
_beginthread( &TestFuncWin, 0, NULL );
getchar();
return 0;
}
武漢-Error<errorcpp@qq.com> 13:00:45
不過(guò)你要是這么用了,技術(shù)經(jīng)理會(huì)懷疑你的能力
- -。(583214826) 13:01:44

上海-千層(670825328) 13:02:09
你都改用api了,那這個(gè)例子就別用boost了。他電腦里沒(méi)這個(gè)。
武漢-Error<errorcpp@qq.com> 13:02:19
這是我編譯通過(guò)的代碼,,,
你怎么跟研究生一樣麻煩
- -。(583214826) 13:02:27
.....
武漢-Error<errorcpp@qq.com> 13:02:45
把 boost的東西 干掉
武漢-Error<errorcpp@qq.com> 13:02:50
剩下的就是你要的
- -。(583214826) 13:02:58
行了
- -。(583214826) 13:03:00
我沒(méi)用boost
- -。(583214826) 13:03:09
thanks
上海-千層(670825328) 13:03:20
在函數(shù)前加修飾字 “WINAPI”
武漢-Error<errorcpp@qq.com> 13:03:32
F{0XCAB)LKNIT0K@G.gif)
裝逼成功
- -。(583214826) 13:03:35
.....
武漢-Error<errorcpp@qq.com> 13:03:46
其實(shí)學(xué)C++的人都很熱情
武漢-Error<errorcpp@qq.com> 13:03:59
只是恨牛不成逼啊
- -。(583214826) 13:04:01
主線程的函數(shù)還是開(kāi)啟線程要執(zhí)行的函數(shù)
上海-千層(670825328) 13:04:01
個(gè)個(gè)都像是剛來(lái)大姨媽一樣
武漢-Error<errorcpp@qq.com> 13:04:32
#include <iostream>
using namespace std;
#include <Windows.h>
#include <process.h>
void TestFuncWin( void *ch )
{
cout << __FUNCTION__ << endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
_beginthread( &TestFuncWin, 0, NULL );
getchar();
return 0;
}
武漢-Error<errorcpp@qq.com> 13:04:36
這樣就不會(huì)錯(cuò)了
武漢-Error<errorcpp@qq.com> 13:04:38
o(︶︿︶)o 唉,,,
- -。(583214826) 13:05:42
好了,成功了
武漢-Error<errorcpp@qq.com> 13:05:58
午休時(shí)間都快過(guò)了,,,
- -。(583214826) 13:06:02

- -。(583214826) 13:06:38
好吧,被罵的很爽,不過(guò)問(wèn)題解決了
- -。(583214826) 13:06:42
謝謝諸位大神啦
上海-千層(670825328) 13:06:59
呵呵,不是成功了
而是失敗剛開(kāi)始
- -。(583214826) 13:07:18
失敗了就debug
- -。(583214826) 13:07:26
為debug奮斗一輩子- -
武漢-Error<errorcpp@qq.com> 13:07:30
上海-千層(670825328) 13:06:59
呵呵,不是成功了
而是失敗剛開(kāi)始
正解
武漢-Error<errorcpp@qq.com> 13:07:48
多線程的還真得 debug一輩子
杯水車薪(1729751029) 13:07:50
不是太可能吧。多線程可以認(rèn)為就是一條不歸路。用了就是找死。
杯水車薪(1729751029) 13:08:00
debug沒(méi)用
- -。(583214826) 13:08:03
那個(gè)
- -。(583214826) 13:08:14
這線程不會(huì)要手動(dòng)銷毀吧- -?
武漢-Error<errorcpp@qq.com> 13:08:17
也別太絕對(duì)嘛
武漢-Error<errorcpp@qq.com> 13:08:28
自然return就可以
武漢-Error<errorcpp@qq.com> 13:08:38
不要問(wèn)其他的了
武漢-Error<errorcpp@qq.com> 13:08:46
將一個(gè)月都講不完
- -。(583214826) 13:08:50
...
- -。(583214826) 13:09:04

- -。(583214826) 13:09:09
返回的線程句柄嘛
上海-千層(670825328) 13:09:07

這不對(duì)。
windows下線程會(huì)占用一個(gè)handle,必須close
- -。(583214826) 13:09:14
不銷毀怎么辦?
上海-千層(670825328) 13:10:06
handle是系統(tǒng)級(jí)別的資源。不close將會(huì)時(shí)間長(zhǎng)占完了以后系統(tǒng)死機(jī)
- -。(583214826) 13:10:10
銷毀線程的函數(shù)叫什么來(lái)著
武漢-Error<errorcpp@qq.com> 13:10:16
這個(gè)我真沒(méi)注意
上海-千層(670825328) 13:10:55
一般不要銷毀線程。否則線程不會(huì)執(zhí)行棧展開(kāi)行為,將會(huì)內(nèi)存泄漏
- -。(583214826) 13:11:31
線程用完才銷毀
上海-千層(670825328) 13:11:47
不是,不要銷毀。要讓線程自己結(jié)束
- -。(583214826) 13:11:56
應(yīng)該有個(gè)什么函數(shù),用來(lái)接收

傳回來(lái)的參數(shù)
杯水車薪(1729751029) 13:12:12
歡迎你來(lái)到多線程的失敗之路。
- -。(583214826) 13:12:42
那線程指定的回調(diào)方法執(zhí)行完了不就自己就結(jié)束了嗎
- -。(583214826) 13:12:53
好吧,那就不用擦屁股了
上海-千層(670825328) 13:13:10
應(yīng)該,這個(gè)想法沒(méi)錯(cuò)。可線程傳回來(lái)之前你創(chuàng)建的線程可能就已經(jīng)結(jié)束了,你要考慮和設(shè)計(jì)
上海-千層(670825328) 13:13:36
這個(gè)handle也要close
- -。(583214826) 13:13:54
我沒(méi)找到什么 distoryThread之類的函數(shù)
杯水車薪(1729751029) 13:13:58
算了,先用著吧。等死機(jī)了再debug
- -。(583214826) 13:14:21
TerminateThread(thread1, 0);
CloseHandle(thread1);
- -。(583214826) 13:14:25
是不是這兩個(gè)
武漢-Error<errorcpp@qq.com> 13:14:34
千城
上海-千層(670825328) 13:14:43
多線程你想debug????????把大姨媽調(diào)出來(lái)了也調(diào)不出問(wèn)題在哪
武漢-Error<errorcpp@qq.com> 13:14:48
你說(shuō)的是 CreateThread 之后必須要 closeHandle把
武漢-Error<errorcpp@qq.com> 13:14:57
我記得用_beginthread是不需要的啊?
武漢-Error<errorcpp@qq.com> 13:15:00
難道我記錯(cuò)了?
- -。(583214826) 13:15:14
_beginthread返回了一個(gè)ptr
- -。(583214826) 13:15:23
我想應(yīng)該是用作關(guān)閉的
武漢-Error<errorcpp@qq.com> 13:15:49
永遠(yuǎn)不要在線程外部強(qiáng)制關(guān)閉線程
- -。(583214826) 13:15:57
嗯,好
上海-千層(670825328) 13:16:37

我就是用這個(gè)函數(shù),以前試過(guò)不close,連續(xù)運(yùn)行10幾個(gè)小時(shí),最后handle沒(méi)有了,出錯(cuò)了。一開(kāi)始都是好的。
武漢-Error<errorcpp@qq.com> 13:17:20
嗯 受教了
杯水車薪(1729751029) 13:19:04
QS$3LX16M424.gif)
武漢-Error<errorcpp@qq.com> 13:19:08
如果用pthread 之類
武漢-Error<errorcpp@qq.com> 13:19:15
是不需要這么麻煩的吧
杯水車薪(1729751029) 13:19:24
好。事情完了。
不過(guò)這個(gè)人的確讓我們不爽,提議T之
- -。(583214826) 13:20:21
首先要澄清一個(gè)問(wèn)題,那就是CreateThread是Windows的API函數(shù),而_beginthread和_beginthreadex則是CRT庫(kù)函數(shù),查看這兩個(gè)CRT函數(shù)的代碼可以得知其實(shí)它們內(nèi)部是調(diào)用的CreateThread(這很顯然嘛,CRT庫(kù)也是要運(yùn)行在Windows上)。
這兩個(gè)CRT函數(shù)與CreateThread有什么區(qū)別呢?區(qū)別在于這兩個(gè)CRT函數(shù)針對(duì)其它CRT庫(kù)函數(shù),特別是那些涉及內(nèi)存分配的CRT函數(shù)做了特殊的處理。直接在CreateThread API創(chuàng)建的線程中使用sprintf,malloc,strcat等涉及CRT存儲(chǔ)堆操作的CRT庫(kù)函數(shù)是很危險(xiǎn)的,容易造成線程的意外中止。 在使用_beginthread和_beginthreadex創(chuàng)建的線程中可以安全的使用CRT函數(shù),但是必須在線程結(jié)束的時(shí)候相應(yīng)的調(diào)用_endthread或_endthreadex。雖然都是內(nèi)部調(diào)用CreateThread API創(chuàng)建線程,但是這兩個(gè)函數(shù)還是有很大的區(qū)別。首先,_beginthreadex函數(shù)比_beginthread函數(shù)多了三個(gè)參數(shù),使它看起來(lái)更像CreateThread而不是同胞兄弟_beginthread;其次,_beginthread要求線程函數(shù)是__cdecl調(diào)用約定,并且沒(méi)有返回值,而_beginthreadex則要求線程函數(shù)是__stdcall調(diào)用約定并且返回線程的退出碼;第三,與_beginthread成對(duì)調(diào)用的_endthread函數(shù)內(nèi)部隱式的調(diào)用CloseHandle關(guān)閉了線程句柄,而與_beginthreadex成對(duì)使用的_endthreadex則沒(méi)有關(guān)閉線程的句柄,需要顯示的調(diào)用CloseHandle關(guān)閉線程句柄;最后,這兩個(gè)函數(shù)在執(zhí)行成功時(shí)返回線程的句柄,可以通過(guò)這個(gè)句柄調(diào)用其它線程相關(guān)的API,比如SetThreadPriority,ResumeThread等等。但是執(zhí)行失敗時(shí)返回值是不同的,_beginthread返回 -1 表示失敗,而_beginthreadex返回 0 表示失敗。
武漢-Error<errorcpp@qq.com> 13:17:39
今天討論一個(gè)問(wèn)題
武漢-Error<errorcpp@qq.com> 13:17:44
關(guān)于線程的
武漢-Error<errorcpp@qq.com> 13:17:59
//Create a new thread.
HANDLE hThread = CreateThread(NULL, 0, SecondThread,
(PVOID)&x, 0, &dwThreadId);
//We don't reference the new thread anymore,
//so close our handle to it.
closeHandle(hThread);
武漢-Error<errorcpp@qq.com> 13:18:08
這是Windows核心編程的一段代碼
武漢-Error<errorcpp@qq.com> 13:18:23
為啥 CreateThread后面要跟一個(gè)closehandle
南昌-貝貝(1125591) 13:19:49
創(chuàng)建線程后,線程有個(gè)內(nèi)核對(duì)象,句柄的存在對(duì)于內(nèi)核對(duì)象的計(jì)數(shù)+1.關(guān)閉句柄以便減少計(jì)數(shù).線程退出時(shí)這個(gè)內(nèi)核對(duì)象就刪除.
北京-li(76433692) 13:22:06
意味著:句柄不作close 線程退出時(shí) 內(nèi)核對(duì)象不自動(dòng)刪除?需要手工刪除?
北京-li(76433692) 13:22:48
創(chuàng)建時(shí)如果不close,在退出線程時(shí)候close也是可以的吧?
武漢-Error<errorcpp@qq.com> 13:23:58
貝妞處理這類場(chǎng)景的規(guī)范是啥
南昌-貝貝(1125591) 13:24:29
內(nèi)核對(duì)象中保存與線程有關(guān)的數(shù)據(jù)
有句柄存在,這個(gè)數(shù)據(jù)的引用計(jì)數(shù)就+1
如果不關(guān)閉.那么就一直可以通過(guò)這個(gè)句柄操作數(shù)據(jù)結(jié)構(gòu),操作線程
不關(guān)閉的話,內(nèi)核對(duì)象在進(jìn)程退出前永不減少引用.引用為0時(shí)才刪除線程內(nèi)核對(duì)象. 如果你不用它,又不 CloseHandle 線程又退出了, 這樣內(nèi)核對(duì)象還在,就好比是有內(nèi)存泄漏一樣
武漢-Error<errorcpp@qq.com> 13:25:08
用pthread之類的庫(kù)不會(huì)有這樣的問(wèn)題吧
南昌-貝貝(1125591) 13:25:09
哥哥我通常保留到句柄...以便以后操作, 在線程退出時(shí)再刪除(以后不用操作它的時(shí)候,就直接CloseHandle
武漢-Error<errorcpp@qq.com> 13:25:30
在線程退出時(shí)再刪除
是自己刪除么?
武漢-Error<errorcpp@qq.com> 13:25:37
還是啟動(dòng)線程負(fù)責(zé)刪除
南昌-貝貝(1125591) 13:25:35
是自己刪除
南昌-貝貝(1125591) 13:25:43
系統(tǒng)給你刪除唄
武漢-Error<errorcpp@qq.com> 13:25:53
return 之前 closehandle?
南昌-貝貝(1125591) 13:26:04
你不用操作這個(gè)線程了就 CloseHandle
武漢-Error<errorcpp@qq.com> 13:28:24
就是線程外部整的,,,
也就是貝妞基本上都是要帶一個(gè) 線程管理模塊
武漢-Error<errorcpp@qq.com> 13:28:33
還是貝妞專業(yè)啊
武漢-Error<errorcpp@qq.com> 13:28:40
o(︶︿︶)o 唉,,,
我才注意到這個(gè)問(wèn)題
中山-瘋子(510776002) 13:38:11
當(dāng)程序調(diào)用CreateThread函數(shù)時(shí),首先系統(tǒng)為線程建立一個(gè)用來(lái)管理線程的數(shù)據(jù)結(jié)構(gòu),其中包含線程的一些統(tǒng)計(jì)信息,如引用計(jì)數(shù)和退出碼等,這個(gè)數(shù)據(jù)結(jié)構(gòu)被稱為線程對(duì)象;接下來(lái)系統(tǒng)將從進(jìn)程的地址空間中為線程的堆棧分配內(nèi)存并開(kāi)始線程的執(zhí)行。當(dāng)線程結(jié)束時(shí),線程的堆棧被釋放,但是線程對(duì)象不會(huì)馬上被釋放,系統(tǒng)保留它以便其他線程可以通過(guò)它檢測(cè)線程的有關(guān)情況,直到使用CloseHandle函數(shù)關(guān)閉線程句柄后,線程對(duì)象才會(huì)被釋放。
但是線程對(duì)象也可以提前被釋放,對(duì)于大部分的句柄來(lái)說(shuō)(如文件句柄hFile,文件尋找句柄hFindFile等),使用CloseHandle函數(shù)關(guān)閉句柄意味著整個(gè)對(duì)象被釋放,但對(duì)于線程句柄來(lái)說(shuō),關(guān)閉它僅釋放線程的統(tǒng)計(jì)信息,并不會(huì)終止線程的執(zhí)行,所以如果不再需要使用線程句柄的話,在調(diào)用CreateThread后馬上就可以將它關(guān)閉掉,線程的執(zhí)行并不會(huì)受影響。