windows环境下的多线程编程

windows环境下的多线程编程

ID:17643277

大小:117.00 KB

页数:19页

时间:2018-09-04

windows环境下的多线程编程_第1页
windows环境下的多线程编程_第2页
windows环境下的多线程编程_第3页
windows环境下的多线程编程_第4页
windows环境下的多线程编程_第5页
资源描述:

《windows环境下的多线程编程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Windows环境下的多线程编程浅讲这是一个简单的关于多线程编程的指南,任何初学者都能在这里找到关于编写简单多线程程序的方法。如果需要更多的关于这方面的知识可以参考MSDN或本文最后列出的参考文献。本文将以C语言作为编程语言,在Lcc-Win32编译器下进行编译调试,使用MS-VisualStudio的人可以参考其相关的使用手册。没有C语言基础的朋友可以找一本简单的教程看一下,相信会是有帮助的。首先解释什么是线程,谈到这个就不得不说一下什么是进程,这是两个相关的概念。为了方便理解,我推荐大家下载并使用一下flashget(网际快车)这个下载软件,当然迅雷也行,只是不如fl

2、ashget这么直观了。O.K.言归正传,当我们打开flashget这个软件时,就是启动了一个进程。这个进程就指flashget这个软件的运行状态。当我们用它来下载时都是在整个flashget软件里操作,所以可以把单个进程看作整个程序的最外层。然后我们可以看到,在用flashget下载时可以选择同时使用多少线程来下载的选项(这里介绍个小技巧,用超级兔子可以优化这里的选项,将最大的线程数限制从10改为30),这个选项就包含了我所要讲的线程的概念。当同时用比如5根线程来下载的话,flashget就会同时使用5个独立的下载程序来下载文件(各个线程通过某种方式通信,以确定各自所要

3、下载的部分,关于线程间的通信在后面介绍)。所以线程可以看作是在进程框架下独立运行的与进程功能相关的程序。如果将windows看作进程的话,那么里面跑得QQ啊,MSN什么的都可以看作是windows的线程了。当然进程本身也可以看作是线程,只是凌驾于其它线程之上的线程罢了。另外比如我们使用浩方对战平台来网上对战,当用浩方启动魔兽时,由于运行的是两个不同的程序,那就是多进程编程了,这要比多线程复杂点,但也是复杂的有限,有兴趣的人可以参考MSDN上的相关资料。最后声明一下,文中的例子都没有过多的注释,不过我都使用了最简单的例子(至少我个人已经想不出更简单的了),如果读者对理解这里

4、的程序上有困难,那么我的建议是这篇文章已经不适合你了,你应该看一些更基础的书,比如《小学生基础算数》^_^。为了使对多线程编程有个更感性的认识,这里先给出一个简单的多线程程序。(注:这是一个利用标准C99函数实现的初级多线程实例,由于兼容性的问题可能在MS-VisualStudio下无法编译通过,遇到这个问题人可以跳过这个实例的实际运作方式或者改用Lcc-Win32)//***********一个简单的多线程程序****************#includevoidthread(void*p){while(1){//这里可以加入一些你所希望线

5、程执行的程序,比如://puts("Thischickturnsmeon.");//break;}endthread();}intmain(void){intb=0;for(inti=0;i<30;i++){printf("beginthread%d",b++);beginthread(thread,0,NULL);}while(1);return1;}//***********************************************代码的一开始是先指明所要用到的头文件,stdheaders.h是Lcc-Win32专门制作的包含了所有符合C99标准的库

6、函数的头文件。这一点在后面不再指出,使用MS-VisualStudio的人可以自行添入stdio.h等标准头文件。接着是一个子程序,这个就是一般的线程程序,在C语言中把它作为一个子程序单独写出。再后面就是main函数,它起的作用就好比整个程序的外框架,具体要做什么则有线程来处理。可以看到在main函数和线程函数中都有无限的循环,这是因为:如果mian函数执行完了,那么无论线程函数处于一个怎样的状态整个程序都会退出,而如果线程中没有无限循环,那么线程的自动结束并不会影响到main函数,是否要结束main函数可以根据实际需要。在main函数中有一个beginthread()函

7、数,这个就是专门用来启动线程的函数,可以看到这个函数的第一个参数就是需要启动的线程的函数地址,不过本文是讨论如何在windows下实现多线程编程,就不对这个函数进行介绍了,而把更多的精力放到对后面windowsAPI(从C语言的观点来开,就是函数)的介绍上,并且beginthread()这个函数过于轻量级,在略微复杂一点的场合下就不能满足要求了。如果执行这个程序并把'//'符号去掉的话,可以发现屏幕的输出毫无章法,这是由于操作系统安时间片给每个线程分配执行时间,当一个线程还没执行完毕,但是分给它的时间片用完了,只得暂时停止工作

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。