- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)