网站大量收购独家精品文档,联系QQ:2885784924

实时通信系统设计.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实时通信系统设计.doc

Z-T-800Z 谒腸必3Z0Ttz0 B乙0诚0 哥聲王焙 实验目的 学习多任务环境的编程,理解多任务程序中任务间通信和同步的方法; 掌握Windows环境中多线程程序设计与实现方法。 实验环境 Windows环境下,使用VC及Windows提供的相关API接口。 实验要求 模拟多任务的交互过程,每个任务用线程实现,基本要求如下: 任务1 :接收从键盘键入的字符,发送给另一任务2 ; 任务2:接收任务1发来的字符,用事件的方式通知任务3接收; 任务3:接收任务2发来的字符,并显示; 可增加其他功能,如:以秒显示时间等; ?系统能退出。 原理及方法 每个任务都用线程实现,相应的API为CreateThread ,原型如下 HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE IpStartAddressr LPVOID 1pParameterf DWORD dwCreationFlags, LPDWORD lpThreadld ); 但是在C运行时库的环境下更合适的函数为.beignthread或_beginthreadex°这样 创建名为taskA,taskB , taskC的三个任务,其中taskA与taskB之间使用套接字的方法 进行通信,taskB与taskC之间使用事件和共享内存(用windowsAPI所提供的 criticalsection保护临界区资源)的方法通信。 在程序中所需使用的主要API如下: uintptr_t _beginthread(void (*start_addr)(void *), unsignd stack_size, void *arglist) int sendto(SOCKET s, const char *buf, int lenz int flags, const struct sockaddr *toz int tolen) int recvfrom(SOCKETf const char *but int len, int flags, const struct sockaddr *from , int from I e n) BOOL SetEvent(HANDLE hEvent) DWORD WaitForSingleObject(HANDLE hHandleQWORD dwMilliseconds) void EnterCriticalSection(LPCRITICAL_SECTION IpCriticalSection) void LeaveCriticalSection(LPCRITICAL_SECTION IpCriticalSection) 实现过程 首先,在ma i n函数中进行初始化操作,包括socket的初始化,任务的创 建,同步事件的创建;以及程序退出时对上述资源的回收。 i n t ma i n ( i n t a r gc t char * a r g v []) { WSADATA ws; ^?SASt ar t up( MAKEWORD( 2, 2), ws); In i t i a 1 i z e C『i t i c a 1 Se c t i on( s e c t i on ); event = Cr e a t e Eve n t ( 0, FALSE, FALSE, 0); i d A = ( HANDLE) .beginthread(taskA, 0, 0); i dB = (HANDLE)_begi nt hread( t askB, 0, 0); i dC = (HANDLE)_begi nt hr ead( t as kC, 0, 0); INFINITE); I NFI NI TE);INFINITE);Mi t Fo r Si n g 1 c Ob j c c t ( i d A, Wa i t Fo r Si ng 1 e Obj e c t ( i d B, INFINITE); I NFI NI TE); INFINITE); Wa i t For Si ng 1 e Obj ec t ( i dC, Cl os e Ha nd 1 e ( i d A); Cl os e Ha nd 1 e (i d B); Cl os e Ha nd 1 e ( i dC); \\S AC1 e a nu p(); De 1 e t e Cr i t i c a 1 Sect i o n ( sect i on ); printf(M\nbye ? b y e\n”); ret

文档评论(0)

ggkkppp + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档