實(shí)時(shí)通信系統(tǒng)設(shè)計(jì)

實(shí)時(shí)通信系統(tǒng)設(shè)計(jì)

ID:30832984

大?。?55.86 KB

頁(yè)數(shù):7頁(yè)

時(shí)間:2019-01-03

實(shí)時(shí)通信系統(tǒng)設(shè)計(jì)_第1頁(yè)
實(shí)時(shí)通信系統(tǒng)設(shè)計(jì)_第2頁(yè)
實(shí)時(shí)通信系統(tǒng)設(shè)計(jì)_第3頁(yè)
實(shí)時(shí)通信系統(tǒng)設(shè)計(jì)_第4頁(yè)
實(shí)時(shí)通信系統(tǒng)設(shè)計(jì)_第5頁(yè)
資源描述:

《實(shí)時(shí)通信系統(tǒng)設(shè)計(jì)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。

1、Z-T-800Z謁腸必3Z0Ttz0B乙0誠(chéng)0哥聲王焙實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)多任務(wù)環(huán)境的編程,理解多任務(wù)程序中任務(wù)間通信和同步的方法;掌握Windows環(huán)境中多線程程序設(shè)計(jì)與實(shí)現(xiàn)方法。實(shí)驗(yàn)環(huán)境Windows環(huán)境下,使用VC及Windows提供的相關(guān)API接口。實(shí)驗(yàn)要求模擬多任務(wù)的交互過(guò)程,每個(gè)任務(wù)用線程實(shí)現(xiàn),基本要求如下:?任務(wù)1:接收從鍵盤(pán)鍵入的字符,發(fā)送給另一任務(wù)2;?任務(wù)2:接收任務(wù)1發(fā)來(lái)的字符,用事件的方式通知任務(wù)3接收;?任務(wù)3:接收任務(wù)2發(fā)來(lái)的字符,并顯示;?可增加其他功能,如:以秒顯示時(shí)間等;

2、?系統(tǒng)能退出。原理及方法每個(gè)任務(wù)都用線程實(shí)現(xiàn),相應(yīng)的API為CreateThread,原型如下HANDLECreateThread(LPSECURITY_ATTRIBUTESlpThreadAttributes,SIZE_TdwStackSize,LPTHREAD_START_ROUTINEIpStartAddressrLPVOID1pParameterfDWORDdwCreationFlags,LPDWORDlpThreadld);但是在C運(yùn)行時(shí)庫(kù)的環(huán)境下更合適的函數(shù)為.beignthread或

3、_beginthreadex°這樣創(chuàng)建名為taskA,taskB,taskC的三個(gè)任務(wù),其中taskA與taskB之間使用套接字的方法進(jìn)行通信,taskB與taskC之間使用事件和共享內(nèi)存(用windowsAPI所提供的criticalsection保護(hù)臨界區(qū)資源)的方法通信。在程序中所需使用的主要API如下:?uintptr_t_beginthread(void(*start_addr)(void*),unsigndstack_size,void*arglist)?intsendto(SOCKE

4、Ts,constchar*buf,intlenzintflags,conststructsockaddr*tozinttolen)?intrecvfrom(SOCKETfconstchar*butintlen,intflags,conststructsockaddr*from,intfromIen)?BOOLSetEvent(HANDLEhEvent)?DWORDWaitForSingleObject(HANDLEhHandleQWORDdwMilliseconds)?voidEnterCriti

5、calSection(LPCRITICAL_SECTIONIpCriticalSection)?voidLeaveCriticalSection(LPCRITICAL_SECTIONIpCriticalSection)實(shí)現(xiàn)過(guò)程首先,在main函數(shù)中進(jìn)行初始化操作,包括socket的初始化,任務(wù)的創(chuàng)建,同步事件的創(chuàng)建;以及程序退出時(shí)對(duì)上述資源的回收。intmain(intargctchar*argv[]){WSADATAws;^?SAStartup(MAKEWORD(2,2),&ws);Initia

6、1izeC『itica1Section(§ion);event=CreateEvent(0,FALSE,FALSE,0);idA=(HANDLE).beginthread(taskA,0,0);idB=(HANDLE)_beginthread(taskB,0,0);idC=(HANDLE)_beginthread(taskC,0,0);INFINITE);INFINITE);INFINITE);MitForSing1cObjcct(idA,WaitForSing1eObject(idB,W

7、aitForSing1eObject(idC,CloseHand1e(idA);CloseHand1e(idB);CloseHand1e(idC);\SAC1eanup();De1eteCritica1Section(§ion);printf(Mbye?bye”);return0;任務(wù)1由main函數(shù)創(chuàng)建,每當(dāng)從鍵盤(pán)接收到一個(gè)字符,就使用socket通過(guò)UDP協(xié)議發(fā)送給任務(wù)2,它們之間通信是用UDP的2400端口,如果鍵入的字符為ESC那么就先把它發(fā)送給任務(wù)2然后退岀運(yùn)行(其中#

8、defineESC27)。void__cdec1taskA(void*param){intret;charbuff32];SOCKETsock=socket(AF_INET,SOCK.DGRAM.0);sockaddr_inaddr;addr.sin_fami1y=AF_1NET;addr.sin_addr.s_addr=incl_addr("127.0.0.1");addr.sin_porI=htons(2400);whi1e(TRUE){buf[0]=_getch();ret=

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。