![按鍵精靈教程:解決多線程資源沖突_第1頁](http://file4.renrendoc.com/view/15d6561382b2f2ea81480e28f7583e25/15d6561382b2f2ea81480e28f7583e251.gif)
![按鍵精靈教程:解決多線程資源沖突_第2頁](http://file4.renrendoc.com/view/15d6561382b2f2ea81480e28f7583e25/15d6561382b2f2ea81480e28f7583e252.gif)
![按鍵精靈教程:解決多線程資源沖突_第3頁](http://file4.renrendoc.com/view/15d6561382b2f2ea81480e28f7583e25/15d6561382b2f2ea81480e28f7583e253.gif)
![按鍵精靈教程:解決多線程資源沖突_第4頁](http://file4.renrendoc.com/view/15d6561382b2f2ea81480e28f7583e25/15d6561382b2f2ea81480e28f7583e254.gif)
![按鍵精靈教程:解決多線程資源沖突_第5頁](http://file4.renrendoc.com/view/15d6561382b2f2ea81480e28f7583e25/15d6561382b2f2ea81480e28f7583e255.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、按鍵精靈教程:解決多線程資源沖突來源:按鍵學(xué)院 【按鍵精靈】故事就從一位童鞋的悲慘經(jīng)歷說起吧。那是一個(gè)雷雨交加的夜晚這位童鞋熬夜寫了一個(gè)關(guān)于赤月傳說交易功能的多線程多開腳本??裣仓嗔ⅠR投身測(cè)試測(cè)試的結(jié)果卻讓他的臉變成了屎色他開了 15個(gè)窗口,掛了半小時(shí),就有10個(gè)窗口崩潰了。他首先想到的是,會(huì)不會(huì)是電腦不給力,線程開多了導(dǎo)致的崩潰?于是,他只開了 5個(gè)窗口啊5個(gè)窗口崩了 3個(gè)這個(gè)問題困擾了他一個(gè)月,后來才發(fā)現(xiàn)!原來,游戲里規(guī)定,交易只能是一對(duì)一的他沒有在腳本中做處理于是,啟動(dòng)腳本之后,所有的號(hào)都爭(zhēng)著和交易號(hào)進(jìn)行交易,只有一個(gè)窗口搶到了和交易號(hào)交易的機(jī)會(huì),其它的窗口沒有搶到,就不斷循環(huán)判斷導(dǎo)致
2、窗口 崩潰就像10個(gè)人爭(zhēng)搶一個(gè)茅坑一樣,1個(gè)人搶到了,其余9個(gè)人都掉坑里了怎么才能讓他們好好排隊(duì)上廁所呢?很多童鞋可能會(huì)立馬想到互斥體。將交易的那段代碼用互斥體保護(hù)起來,當(dāng)一個(gè)線程在執(zhí)行交易代碼時(shí),其它的線程就無法進(jìn)行交易操作。為了方便大家學(xué)習(xí)和使用,我們的06老濕提供了一段Api創(chuàng)建互斥體的代碼范例API函數(shù)要用到三個(gè)Api函數(shù):CreateMutexWaitForSingleObjectReleaseMutex函教名稱Createlutez函教功能刖建互斥體釜教1:指定一個(gè)SECURITY, AT TRIBUTES結(jié)構(gòu),或傳遞零值,表示使用不允許繼承的默認(rèn)描述符 參教2:如創(chuàng)建進(jìn)程希望立即
3、擁有巨斥體,則設(shè)為TRUE。一個(gè)巨斥體同時(shí)只能由一個(gè)線程擁有。釜教3:指定互斥體對(duì)象的名字。通回值如機(jī)行成功,就返回互斥體對(duì)象的句柄;零表示出錯(cuò)。函教名稱TaitForSingleObject函教由熊檢刪對(duì)象的信號(hào)狀態(tài),當(dāng)函教的也行時(shí)目超過參教2設(shè)置的襯隔時(shí)襯,或通回?zé)o信號(hào)狀態(tài),釜教拳教1 :對(duì)象句柄釜教2:定時(shí)時(shí)間間隔通回值WAIT_OBJECT_0 0 x00000000 :核心對(duì)象已被激活WAIT.TIMEOUT 0k00000102:等待超時(shí)WAIT_FAILED DxFFFFFFFF :出現(xiàn)錯(cuò)誤,可通idGetLastError得到錯(cuò)誤代碼函教名稱Releaselutex函教功能拜誡
4、由線程擁有的一個(gè)互斥體的控制很釜教釜教:指定一個(gè)互斥體的句柄。通回值非零表示成功,零表示失敗。步驟1、調(diào)用Api函數(shù):CreateMutex函數(shù)創(chuàng)建一個(gè)新的互斥體,并且將創(chuàng)建之后返回的互斥 體句柄賦值給環(huán)境變:交易2、交易代碼執(zhí)行之前,調(diào)用Api函數(shù):WaitForSingleObject函數(shù),設(shè)置互斥體使用時(shí) 長(zhǎng)為30秒。(如果一個(gè)交易操作需要3分鐘,則這里的使用時(shí)長(zhǎng)設(shè)置為大于等于30分鐘。)當(dāng)?shù)谝粭l線程執(zhí)行到WaitForSingleObject函數(shù)時(shí),會(huì)獲取30秒的互斥體使用時(shí)長(zhǎng),在這30秒時(shí)間內(nèi),只有第一條線程可以執(zhí)行被互斥體保護(hù)起來的代碼段,其它的線程都在等待。3、交易代碼執(zhí)行之后,
5、調(diào)用Api函數(shù):ReleaseMutex函數(shù),釋放互斥體使用權(quán)當(dāng)30秒時(shí)間過后,第一條線程會(huì)釋放對(duì)互斥體的控制權(quán),讓給下一條線程使用。代碼DeclareFunctionCreateMutexLibkernel32AliasCreateMutexA(lpMutexAttributesAsLong,ByValbInitialOwnerAsLong,ByVallpNameAsString)AsLongDeclareFunctionReleaseMutexLibkernel32AliasReleaseMutex(ByValhMutexAsLong)DeclareFunctionWaitForSingl
6、eObjectLibkernel32AliasWaitForSingleObject(ByValhHandleAsLong,ByValdwMillisecondsAsLong)AsLongDeclareFunctionCloseHandlelibkernel32(hdraslong)asLongDimenv交易交易=創(chuàng)建互斥體()For10BeginThread游戲交易NextSub游戲交易()綁定窗口登錄帳號(hào)尋找npcCall鎖定(交易,30000)交易Call解鎖(交易)EndSubFunction創(chuàng)建互斥體()/*隨機(jī)生成互斥體名稱DimTempStr,iTempStr=anjian_m
7、utex_Fori=0To12RandomizeTempStr=TempStr&Chr(24*Rnd) + 65)Next*/創(chuàng)建互斥體=CreateMutex(0,true,TempStr)EndFunctionSub關(guān)閉互斥體(hdr)CallCloseHandle(hdr)EndSubFunction 鎖定(Hdr,Max)鎖定=WaitForSingleObject(Hdr,Max)EndFunctionFunction 解鎖(Hdr)CallReleaseMutex(Hdr)EndFunction/*SubOnScriptExit()TracePrint關(guān)閉互斥體”Call關(guān)閉互斥體
8、(交易)EndSub*/注意 1:本例子中,在創(chuàng)建互斥體時(shí),使用了隨機(jī)產(chǎn)生互斥體的名稱隨機(jī)名稱是以anjian_mutex_開頭并且加上12個(gè)隨機(jī)字母隨機(jī)名稱這樣復(fù)雜是為了避免名稱沖突,如果有一樣的名稱存在,那么當(dāng)前的互斥體就會(huì)創(chuàng)建失敗注意2:代碼中還有一個(gè)CloseHandle函數(shù),被注釋掉了因?yàn)?,我們的主線程結(jié)束得比其它的十條線程快,所以當(dāng)十條線程還在創(chuàng)建啟動(dòng)的過程中,主線程就已經(jīng)結(jié)束,并且觸發(fā)了腳本停止事件,執(zhí)行了關(guān)閉互斥體的命令這樣會(huì)導(dǎo)致,剛創(chuàng)建的互斥體被關(guān)閉的情況所以,如果主線程結(jié)束得比其他線程快,就不要使用關(guān)閉互斥體命令了互斥體所占用的內(nèi)存空間并不大,不關(guān)閉也不影響那么,如果游戲規(guī)
9、定,登錄帳號(hào)和交易這兩個(gè)操作都只能一個(gè)一個(gè)進(jìn)行操作呢?那么我們就需要設(shè)置兩個(gè)互斥體:登錄互斥體和交易互斥體代碼:DeclareFunctionCreateMutexLibkernel32AliasCreateMutexA(lpMutexAttributesAsLong,ByValbInitialOwnerAsLong,ByVallpNameAsString)AsLongDeclareFunctionReleaseMutexLibkernel32AliasReleaseMutex(ByValhMutexAsLong)DeclareFunctionWaitForSingleObjectLibker
10、nel32AliasWaitForSingleObject(ByValhHandleAsLong,ByValdwMillisecondsAsLong)AsLongDeclareFunctionCloseHandlelibkernel32(hdraslong)asLongDimenv交易,登錄登錄=創(chuàng)建互斥體()交易=創(chuàng)建互斥體()For10BeginThread游戲交易NextSub游戲交易()綁定窗口Call鎖定(登錄,30000)登錄帳號(hào)Call解鎖(登錄)尋找npcCall鎖定(交易,30000)交易Call解鎖(交易)EndSubFunction創(chuàng)建互斥體()/*隨機(jī)生成互斥體名稱DimTempStr,iTempStr=anjian_mutex_Fori=0To12RandomizeTempStr=TempStr&Chr(24*Rnd) + 65)Next*/創(chuàng)建互斥體=CreateMutex(0,true,T empStr)EndFunctionSub關(guān)閉互斥體(hdr)CallCloseHandle(hdr)EndSubFunction 鎖定(H
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教版數(shù)學(xué)七年級(jí)下冊(cè)5.3.1《平行線的性質(zhì)》聽評(píng)課記錄1
- 粵教版道德與法治九年級(jí)上冊(cè)3.2.2《社會(huì)和諧 人人共享》聽課評(píng)課記錄
- 浙教版數(shù)學(xué)七年級(jí)下冊(cè)《4.3 用乘法公式分解因式》聽評(píng)課記錄2
- 中圖版歷史七年級(jí)上冊(cè)第5課《青銅器和甲骨文》聽課評(píng)課記錄
- 人教部編版八年級(jí)道德與法治上冊(cè):3.1《維護(hù)秩序》聽課評(píng)課記錄1
- 環(huán)保工程合同(2篇)
- 人教版七年級(jí)地理下冊(cè)《日本》聽課評(píng)課記錄4
- 人教版歷史八年級(jí)上冊(cè)第15課《北伐戰(zhàn)爭(zhēng)》聽課評(píng)課記錄
- 新版華東師大版八年級(jí)數(shù)學(xué)下冊(cè)《16.3可化為一元一次方程的分式方程2》聽評(píng)課記錄9
- 無錫蘇教版五年級(jí)數(shù)學(xué)下冊(cè)第四單元第11課時(shí)《通分》聽評(píng)課記錄
- 電網(wǎng)工程設(shè)備材料信息參考價(jià)(2024年第四季度)
- 2025年江蘇農(nóng)牧科技職業(yè)學(xué)院高職單招職業(yè)技能測(cè)試近5年常考版參考題庫含答案解析
- 2025江蘇連云港市贛榆城市建設(shè)發(fā)展集團(tuán)限公司招聘工作人員15人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 江蘇省揚(yáng)州市蔣王小學(xué)2023~2024年五年級(jí)上學(xué)期英語期末試卷(含答案無聽力原文無音頻)
- 數(shù)學(xué)-湖南省新高考教學(xué)教研聯(lián)盟(長(zhǎng)郡二十校聯(lián)盟)2024-2025學(xué)年2025屆高三上學(xué)期第一次預(yù)熱演練試題和答案
- 決勝中層:中層管理者的九項(xiàng)修煉-記錄
- 《軌道交通工程盾構(gòu)施工技術(shù)》 課件 項(xiàng)目2 盾構(gòu)構(gòu)造認(rèn)知
- 《港珠澳大橋演講》課件
- 《有機(jī)化學(xué)》課件-第十章 羧酸及其衍生物
- 人教版道德與法治五年級(jí)下冊(cè)《第一單元 我們一家人》大單元整體教學(xué)設(shè)計(jì)2022課標(biāo)
- 2024年海南公務(wù)員考試申論試題(A卷)
評(píng)論
0/150
提交評(píng)論