VC里使用信号量实现线程同步与互斥

一、在vc里实现线程同步与互斥运行,你需要对一下几个函数进行研究学习与掌握使用:1、CreateThread()//创建线程的函数2、CreateSemaphore()//创建信号量的函数3、WaitForSingleObject()//4、ReleaseSemaphore()//*相关函数有:CreateProcess()//创建进程的函数Beginthread()//创建线程的函数OpenSemaphore()WaitForMultipleObjects()(有兴趣者可以对相关函数进行研究学习)二、第一步:你需要首先学会在vc里创建线程1、这里提供创建线程的函数是:CreateThread()函数的原型是:HANDLECreateThread(LPSECURITY_ATTRIBUTESlpThreadAttributes,//SDSIZE_TdwStackSize,//initialstacksizeLPTHREAD_START_ROUTINElpStartAddress,//threadfunctionLPVOIDlpParameter,//threadargumentDWORDdwCreationFlags,//creationoptionLPDWORDlpThreadId//threadidentifier);函数说明:创建一个线程,线程指定要执行的函数或者代码块。函数有六个参数,要理解六个参数分别是干什么用的。下面说明参数的使用:参数1:lpThreadAttributes:指向SECURITY_ATTRIBUTES型态的结构的指针。在Windows98中忽略该参数。在WindowsNT中,NULL使用默认安全性,不可以被子线程继承,否则需要定义一个结构体将它的bInheritHandle成员初始化为TRUE,一般是NULL。参数2:dwStackSize,设置初始栈的大小,以字节为单位,如果为0,那么默认将使用与调用该函数的线程相同的栈空间大小。任何情况下,Windows根据需要动态延长堆栈的大小。参数3:lpStartAddress,指向线程函数的指针,即函数入口。形式:@函数名,函数名称没有限制,但是必须以下列形式声明:DWORDWINAPI函数名(LPVOIDlpParam),格式不正确将无法调用成功。比如一下程序1中的函数fun1可以这有定义:DWORDWINAPIFun1(LPVOIDIpParameter);//有点麻烦调用的时候是:hThread1=CreateThread(NULL,0,Fun1,NULL,0,NULL);但是这有写函数有点不习惯,有点麻烦,所以可以这么来定义函数:voidfun1();,但是调用的时候要这么写:CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Fun1,NULL,0,NULL);//也就是lpStartAddress要这样通过LPTHREAD_START_ROUTINE转换。参数4:lpParameter:向线程函数传递的参数,是一个指向结构的指针,不需传递参数时,为NULL。比如:你要向函数fun1传递一个字符串,可以这么来写程序:程序如下:#include<Windows.h>#include<iostream>#include<stdio.h>#include<conio.h>#include<process.h>voidFun1(LPVOIDp);voidmain(){HANDLEhThread1;char*a="hellofun1!";hThread1=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Fun1,a,0,NULL);getch();CloseHandle(hThread1);}voidFun1(LPVOIDp){printf("%s\n",(char*)p);}向控制台打印:参数5:dwCreationFlags:线程标志,可取值如下(1)CREATE_SUSPENDED(0x00000004):创建一个挂起的线程,注:传0x00000004(2)0:表示创建后立即激活。(3)STACK_SIZE_PARAM_IS_A_RESERVATION(0x00010000):dwStackSize参数指定初始的保留堆栈的大小,否则,dwStackSize指定提交的大小。该标记值在Windows2000/NTandWindowsMe/98/95上不支持。参数6:lpThreadId:保存新线程的id。(各参数说明完毕,注:参数说明来自百度文档)函数返回值:函数成功,返回线程句柄;函数失败返回false。若不想返回线程ID,设置值为NULL。到这你会在vc里面创建线程了吗?学习以上知识后,我们就会创建线程了,接下来我们要让线程同步与互斥执行。三、让线程同步与互斥执行为了能够会使用线程同步与互斥执行,我们需要对一下函数进行研究学习。1、信号量的创建(基础是要了解什么是信号量以及信号量的控制)函数是:CreateSemaphore函数原型:HANDLECreateSemaphore(LPSECURITY_ATTRIBUTESlpSemaphoreAttributes,//SDLONGlInitialCount,//initialcountLONGlMaximumCount,//maximumcountLPCTSTRlpName//objectname);参数说明如下:lpSemaphoreAttributesSECURITY_ATTRIBUTES,指定一个SECURITY_ATTRIBUTES结构,或传递零值(将参数声明为ByValAsLong,并传递零值)——表示采用不允许继承的默认描述符。该参数定义了信号量的安全特性...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

笔杆子文秘
机构认证
内容提供者

为您提供优质文档,供您参考!

确认删除?