创业指导

VC\PV VC、PE和天使投资是什么意思?有什么区别?

|

【www.dagaqi.com--创业指导】

VC、PE和天使投资是什么意思?有什么区别?
VC\PV 第一篇

  VC,相信他能够把公司做好。他们不会去审核商业计划书,更不会在经过细致地研究他的公司之后,看是否有利可图才决定是否投资,他们的投资更像是感情投资。所以严格说来,家人和朋友只能算作是创业者的天使,他们并不能算是天使投资人。

  至于第三个F,也不难理解。初创公司的风险很大,对于跟创业者非亲非故的外部投资人来说,他对创业者的历史和背景毫不知情,聪明和理性的投资人在把钱投进去之前当然也会做一些研究和尽职调查,但是无论多少研究和调查都无法消除全部的投资风险,因此,他们也获得“傻瓜”的称号。但并不是这些人真傻,实际上往往相反,他们都独具慧眼、思维前瞻,投钱给一些别人没有眼光看出其前景的企业。这些人可能在某个领域经验丰富,或者本身就有成功的创业经历,他们才是真正意义上的天使投资人。

  2) 天使投资人的典型代表

  浙商、苏商等沿海发达地区的商人。

  PE私募股权投资

  1) PE概念及运作机制PE(Private Equity)私募股权投资是通过私募形式对非上市企业进行的权益性投资,在交易实施过程中附带考虑了将来的退出机制,即通过上市、并购或管理层回购等方式,出售持股获利。广义上的PE对处于种子期、初创期、发展期、扩展期、成熟期等各个时期的企业进行投资。

  狭义的PE主要指对已经形成一定规模的,并产生稳定现金流的成熟企业的私募股权投资部分,主要是指创业投资后期的私募股权投资部分,而这其中并购基金和夹层资本在资金规模上占最大的一部分。(并购基金是专注于对目标企业进行并购的基金,其投资手法是,通过收购目标企业股权,获得对目标企业的控制权,然后对其进行一定的重组改造,持有一定时期后再出售。并购基金与其他类型投资的不同表现在,风险投资主要投资于创业型企业,并购基金选择的对象是成熟企业;其他私募股权投资对企业控制权无兴趣,而并购基金意在获得目标企业的控制权。并购基金经常出现在MBO和MBI中。)

  2) 私募股权投资的作用私募股权投资基金是推动资本市场可持续发展的力量。私募股权基金产业的快速发展将为提高金融业的收益率提供新的方法,也为解决民营小企业的金融困境提供有效的途径,打通产业需求和金融资本获利的需求。

  VC和天使投资有什么区别?

  VC就是所谓的风险投资:

  1、是企业行为;

  2、投资金额多在1000万RMB以上,多的也有几家VC联合投上亿的,前几年VC以美元投资比较多,最近几年人民币投资也在逐步增加。VC的资金来源,大多是利用国外的投资基金为主,中国本土的资金用于VC的近年也开始增加;

  3、VC投资的企业,一般是处于成长期的企业,也就是说,已经有比较成熟的盈利模式后,他们才会介入;

  4、VC一般都不参与公司管理,对企业经营团队要求很高;

  5、VC的退出机制,卖给私募基金或者上市的方式在中国比较多,在美国则以企业兼并的形式退出的占大部分。

  天使投资:

  1、天使投资人一般是事业比较成功的个人,所以一般的天使投资,基本都是个人行为,或者是一些小的投资公司运作;

  2、投资的金额不限,可能只有20万,也可能是几百万,要看投资人的实力和投资项目需要的钱;一般天使投资的资金来源,都是个人募集或者就是投资者本人在工作中的收入;

  3、天使投资往往进入初创期的企业,这些钱更多的是鼓励创业者敢于创新,并用来创立盈利模式。同时在模式不成熟之前,用于支付创业者工资,促成其坚持下去;

  4、天使投资一般都会参与到企业管理中来,并会做到密切的监督,当然这个不是坏事,毕竟能做天使投资的人,对怎样创立企业,怎样建立模式会有更多的经验和办法;

  5、天使投资的退出机制,一般是模式成熟了,就卖给VC或私募基金,毕竟作为投资,就不可能陪你玩到最后。

  天使投资、VC、PE 介入企业的节点是什么样的?分别起什么作用?

  天使投资:

  公司初创、起步期,还没有成熟的商业计划、团队、经营模式,很多事情都在摸索,所以,很多天使投资都是熟人、朋友,基于对人的信任而投资。

  熟人、朋友做天使投资人,他的作用往往只是帮助创业者获得启动资金;而成熟的天使投资人或者天使投资机构的投资,则除了上面的作用外,还会帮助创业者寻找方向、提供指导(包括管理、市场、产品各个方面)、提供资源和渠道。

  VC:

  公司发展中早期,有了比较成熟的商业计划、经营模式,已经初见盈利的端倪,有的VC还会要求已经有了盈利或者收入达到什么规模。

  VC在这个时候进入非常关键,可以起到为公司提升价值的作用,包括能帮助其获得资本市场的认可,为后续融资奠定基础;使公司获得资金进一步开拓市场,尤其是最需要烧钱的时候;提供一定的渠道,帮助公司拓展市场。

  PE:

  一般是Pre-IPO时期,公司发展成熟期,公司已经有了上市的基础,达到了PE要求的收入或者盈利

  通常提供必要的资金和经验帮助完成IPO所需要的重组架构,提供上市融资前所需要的资金,按照上市公司的要求帮助公司梳理治理结构、盈利模式、募集项目,以便能使得至少在1-3年内上市。这个时候选择PE需要谨慎,没有特别声望或者手段可以帮助公司解决上市问题的PE或者不能提供大量资金解决上市前的资金需求的PE,就不是特别必要了。

  风险投资、天使投资及私募股权投资三者的关系:

  天使投资是风险投资的一种。风险投资一般投资额较大,在投入资金的同时也投入管理,并且会随着所投资企业的发展逐步增加投入。天使投资投入资金额一般较小,一次投入,不参与企业直接管理,对投资企业的选择更多基于投资人的主观判断甚至喜好。

  PE与VC虽然都是对上市前企业的投资,但是两者在投资阶段、投资规模、投资理念和投资特点等方面有很大的不同。

  区分VC与PE的简单方式:

  VC主要投资企业的前期,PE主要投资后期。当然,前后期的划分使得VC与PE在投资理念、规模上都不尽相同。PE对处于种子期、初创期、发展期、扩展期、成熟期和 Pre-IPO各个时期企业进行投资,故广义上的PE包含VC。在激烈的市场竞争下,VC与PE的业务渗透越来越大。很多传统上的VC机构现在也介入PE业务,而许多传统上被认为专做PE业务的机构也参与VC项目,也就是说,PE与VC只是概念上的一个区分,在实际业务中两者界限越来越模糊。比如著名的PE机构如凯雷(Carlyle)也涉及VC业务,其投资的携程网、聚众传媒等便是VC形式的投资。

  

VC风险投资怎样考察一个投资项目?考察创业者?
VC\PV 第二篇

  如果你有一个创业的好点子或是建立了一家初创企业,可能会考虑从风险投资家(VC)那儿筹集些资金。现在,我要和你谈谈VC在评估一个投资项目时会考虑哪些关键点。他们一般会从以下三方面入手:首先是你的创业项目,其次是你本人,第三是你的社会关系。

  关于创业项目

  1. VC的多数投资活动最终都会打水漂,所以一个成功的投资案例承担着为众多失败项目摊薄成本的任务。通常情况下,VC期望的投资回报倍数是10~100倍。如果你无法让他看到这个前景,他就不会对你的创意感兴趣。也就是说,如果看上去你的创业点子无法至少在最初几年里为企业带来每年几倍的增长率,那你别就在融资这事上浪费时间了。

  2. 如果你的企业未来确实达不到几亿美元的市场估值,那你起码得让VC相信你的创意具有快速变现能力,能在他在投资一年后就获得丰厚收益。否则,也别想得到风险投资这事了。

  3. 如果你想凭借企业的长远发展能力而不是一时的获利能力吸引投资,那就必须让VC看到一个有说服力的商业模式。这个商业模式要能聚集大量人气并借此赚钱,即便无法直接做到这一点,至少也要能通过其他一些变通方式达到这个效果。

  4. VC期望看到的是那种能引领社会潮流的创业点子,这样你的企业才有可能成为一个新兴市场中的标杆企业。

  5. VC会向那些技术大拿们征询意见,如果你的创意不能入他们的法眼,那VC也就不会有投资兴趣。

  6. VC之间会相互影响,如果你的创业点子或是初创企业本身属于一个新领域,而这个领域中已经有了一个受到市场热捧的创业先行者,那其他VC也会试图找到这类企业并投资。所以,你和朋友们是否特别看好自己的点子并不是最重要的,只要VC看好它,你就能得到投资。当然,绝大多数这种投资最终都会以失败告终,但至少在此之前你已经得到了投资。

  哦,顺便问一句,你有商业计划吗?有时候没有也没关系,因为有些VC觉得制定商业计划完全是瞎耽误工夫。在他们看来,商业计划就像是丰满的理想,它总是敌不过骨感的现实。在多变的世事面前,考虑如何实际推进一个项目时,商业计划几乎没有用武之地。

  话虽如此,但你还是要有一个基本的计划,以此表明你的创业目标以及在达到这一目标的过程中企业财务状况的走势。这能让VC感到你对创业这事是认真的并已胸有成竹,经得起他们提出的各种质疑。从这方面来讲,我并不认为制定商业计划是多此一举。

  除此之外,你还需要一个现场阐述的机会。在这个场合,你要利用良好的沟通能力充分展现自己的创业激情,并让自己的激情感染在场的VC。要是你的情绪无法感染他们,那融资注定会失败。

  关于创业者本人

  VC考察的核心还是你本人,他们要看你是否具备一名成功创业者的潜质:能否勇挑重担,是否值得信赖。所以,当你面对VC时,必须做到“言必信,行必果”,这能体现出你拥有他们看重的创业者基本素质。另外,你还要注意让自己的面部表情和肢体语言与自己的话语相匹配。

  在评估过程中,VC不会光听你说,还要看你是否确实值得信赖。他们会着重考虑以下几方面问题:

  1. VC要考虑的是,如果你的企业能够成功发展到准备上市的那一天,你是否具备担任上市公司CEO的能力。如果你缺乏这个能力,VC未必一定会放弃投资,但投资的可能性确实会降低。而且,如果他们投资了,等到未来公司要上市的时候,他们要么会把你辞掉,要么会把你调到一个非决策性岗位上。

  2. VC会看你是否具有超凡的激情,如果你没有,他们的投资意愿也会降低。你要让自己的激情感染到他们,要是你做不到这一点,他们会觉得你没有带动他人的能力,也就不会投资你的企业。

  3. VC会考察你在资金短缺时解决问题的能力。你花钱时的责任感是他们要了解的重要问题之一,因为把别人的钱不当钱的创业者,他们已经见得太多了。如果你看上去自视甚高又很浮夸,热衷于那种体面的生活,喜欢开豪华车、去高档餐厅,他们就不会放心地把自己的钱交到你手上。去见VC时,记着别开豪华车,穿着要普通,不要戴名表,见面地点不要选在高档餐厅,也不要承认自己喜欢奢侈品。在这方面,你能获得的最理想的效果是,在展现自己节俭一面的同时,还让他们感觉你善于独辟蹊径,从而花小钱甚至不花钱就能办成大事。这是他们最乐于看到的。

  4. 拥有一次或多次创业成功的经历将成为你最大的优势,如果你有这样的经历,VC们会把你当成“富矿”。这时,无论你提出什么样的创业点子,他们都会愿意投资的。当然,绝大多数人没有这类经历。此时,拥有曾在一家成功的创业企业担任要职的经历也很有价值,因为这意味着你拥有伴随一家创业企业走向成功的经验,同时还知道在这个过程中如何避免陷入创业误区。

  5. VC们还希望看到你在创业这事上有破釜沉舟的决心。他们想看到的是你把全部身家都投入到了这次创业上,哪怕会因此破产也在所不惜,因为此举意味着你会不遗余力地为企业谋发展。如果你的全部创业资金都来自外部,你个人只是以非物质资本入股,VC就不大可能给你投资。

  6.VC还很想知道你是否是以被炒鱿鱼的方式离开上一个东家的。说起来有些令人难以置信,但如果之前你是出于某种VC眼中的“正当理由”被炒掉的,这种经历会成为你的加分项。比如,你本来在一家大企业里兢兢业业地工作,但企业管理层不但拒绝了你提出的创新建议,还因此解雇了你,这就是一个被炒的“正当理由”。至少在美国,很多出类拔萃的创业者都有过被大企业解雇的经历,因为这些企业容不下具有创新精神的人。

  7. 当然,VC也很看重企业财务状况和盈利能力。他们想从你身上看到的不仅仅是创新能力,也希望你有经营头脑,尤其有强烈的盈利欲望。许多创业者长于创办企业、研发产品,很少从财务角度考虑问题,也缺乏让企业在最短的时间内盈利的意识。如果能让VC看到你在这些方面与众不同,会对你很有帮助。如果你的企业已经拥有过硬的财务专业人士,或是你能向VC证明,其投资能引来这类专业人士加盟的话,也会对你成功引资很有帮助。VC通常会在投资的同时任用自己信得过的财务人员,以此作为制衡企业创始人的方式,从而确保后者不会疯狂烧钱。因此,企业拥有优秀的财务人员会让VC感到安心。

  创业者的社会关系

  VC考察创业者时,后者拥有的社会关系是至关重要的一环。因为看到你掌握的社会关系,VC就能明了,为了创业成功,你还需要哪些新的社会资源。所以,VC会考察你拥有的所有社会关系,尤其是如下几类:

  1. VC圈

  信不信由你,如果你告诉VC,你已经与其他VC接触过而且他们很喜欢你的创意,即便你没从后者那里拿到投资,前者也会对你另眼相看。如果你告诉一个VC,另一个VC已经对你的创意产生了投资兴趣,最终结果很可能是这两个VC联手给你投资,因为联合投资能分散投资风险。万一最终投资失败了,他们还能跟自己的老板解释说:你看,咱们并不是唯一的失败者。这对于维护VC的职业声誉很有好处,他们以后跳槽的时候用得着这个。

  2. 媒体圈

  VC喜欢与媒体有良好关系的企业创始人。如果以后企业要上市,就得广泛宣传,以说服公众购买一只他们以前从来没听说过的股票。所以,与记者、科技自媒体写手、博主、社交媒体人、公关人士及投资者关系管理人士搞好关系,会让VC对你有好印象。另一方面,一旦企业得到投资后发展得不顺利,VC不愿意追加投资,如果此时你与媒体拥有良好关系,你还可能从高净值人士那里直接获得投资。所以对创业者来说,通过媒体保持曝光率是很有用的。VC本身很容易受到媒体的影响,如果在见他们之前你已经借助媒体赚足了曝光率,就掌握了先机。

  3.天使投资人

  天使投资人是指那些给早期创业企业投资的非职业投资者。从融资顺序看,天使投资人通常紧跟在创业者的亲朋好友之后。选择天使投资的好处在于,虽然天使投资人也期望得到经济回报,但他们对你的创业点子本身更感兴趣。VC会很高兴地知道你认识一大帮天使投资人,因为这样一来,当你发现企业实际需求的资金量超出了融资计划而VC又不想追加投资的时候,你就可以向天使投资人求得帮助。而且,来自天使投资的后续资金往往具有更高的估值,这使得VC前期投资的股份价值不会被稀释。这一点对VC来说很重要,因为这意味着他们的投资权益没有受损。

  4. 企业客户

  这类创业者拥有的社会关系是VC最为看重的,因为客户是实实在在购买企业产品的人。VC们很希望能与创业企业的客户直接对话,你给VC引荐的可以有效对话的客户越多,你获得投资的机会就越大。有时候,客户还会和VC联手投资,这种方式会让后者在投资时感到更安心。而且,如果最终投资失败或是效果不尽如人意,这种联合投资还能减少他们的损失。

  作者:泰德·普林斯

  

vc投资的陷阱 与vc谈判的技巧和防范
VC\PV 第三篇

  很多创业者期待天使投资人真的如天使般善心,愿意长期扶助创业企业的同时,也要明确地认识到,有些投资人是单纯追求财务上的收益最大化的,因此要注意与vc谈判的技巧。那么我们就来看看VC们可能会使用哪些手段威胁创业者的利益。

  在遇到这些条款时,如果创业者的议价能力足够强,要果断地作出调整或直接拒绝,因为这里面常常藏着陷阱。

  法律咨询费用

  处理投融资交易的律师是很贵的,但是只要你们请了律师,这笔钱就一定要有人出。对于VC的投资经理而言,他们可不愿意告诉合伙人钱被用来做法律咨询了。

  因此,资方不可能为律师额外出钱,如果创业者不愿支付,所获估值就会被压低,省下的这部分钱就是律师费。

  所以,为了拿到一个正常的估值,你应该负担这部分费用。值得注意的是,你的这一行为等于是花钱雇佣与你立场相悖的律师,因此你必须设定消费上限,不能让律师无休止地纠缠下去,无休止地赚你自己的钱。

  认股权

  一种反稀释的方法,允许资方以固定的价格收购企业之后发行的股票,尤其在之后的融资轮次中。

  这意味着资方可以以较低的股价不断保持自己的股份,从而获得每一融资轮次中股票涨价的收益。这显然损害了之后想加入的其他资方的利益,会导致公司的后续融资变得艰难。而且,复杂的股权结构会增加所有股权架构调整工作的难度。所以尽量不要给资方认股权。

  估值

  估值虚高会带来至少两种危害。第一,投资者会沉浸在被别人抬得虚高的身价里,或者干脆拿到了远超预算的投资,股票涨价,账面充盈,这一切令投资者和其他员工丧失了危机意识。最后当企业烂掉,你会发现当初的高估值完全没有意义,你手里的股票无法兑到那么多的现金。

  第二,估值实在夸张,导致后续轮次的融资难以进行。假如你在天使轮拿到了一亿元的估值,到了A轮还有哪个资方能够继续抬高估值投你呢?

  棘轮条款

  棘轮条款通常是温和的,不会具有明显的侵略性。很多时候加权平均的防稀释或者优先股的转换权价格调整是有据可循的。

  但也有比较可怕的防稀释条款。有一种防稀释体现在,如果后续融资时股票降价,那么资方的股票数量会得到重新调整。比如,某次融资中,你以公司10%的股份作为交换,以每股10美元的价格向风投公司发行10万股 ,借此募集了一百万美元。下一轮融资中,你发行的每一股是5美元,最初的风投公司会根据条款获得额外的10万股,在原始的资产构成表上,新的资本注入之前,他现在就拥有你公司20%的股份,而不是本来的10%。

  因为反稀释条款往往是迭代重复的,受到棘轮保护的便只有资方,而公司的股价和其他持股人的利益会由此不断缩水,尤其当公司遇到困境,估值下调的时候。棘轮条款逼着创业者不断抬升估值和股价,这听上去很美,实际上常常是无法回头的。

  期权

  期权是个好东西,但不合理的行权期就不是了。行权期只有一个季度的期权和要求离职时立即反向套现的霸王条款没两样。

  既然设置期权,就让它的时间足够长,长到公司的价值足以实现的那天。

  复杂的条款

  复杂的条款本身就是有害的,它难以理解,可能在将来带来意想不到的麻烦。

  投资意向很明确但出价低得离谱

  很可能是资方欣赏你和团队,他们希望与你们达成合作,但是你手里的项目实在是问题多多或者根本上就不好,这时候,多和资方聊聊,对项目计划书做出一些修改,资方也许会欣然抬价并达成交易。

  文/太美

  

VC数据类型详解
VC\PV 第四篇

VC++常用数据类型及其操作详解

-------西安邮电学院计算机系

徐兆元( )

2004/08/03

目录 一. 二.

VC常用数据类型列表 常用数据类型转化

2.1数学类型变量与字符串相互转换

2.2 CString及string,char *与其他数据类型的转换和操作 ●CString,string,char*的综合比较 ●数学类型与CString相互转化 ●CString与char*相互转换举例 ●CString 与 BSTR 型转换 ●VARIANT 型转化成 CString 型

2.3 BSTR、_bstr_t与CComBSTR

2.4 VARIANT 、_variant_t 与 COleVariant

附录CString及字符串转及操作详解

参考书籍:CSDN,<<MFC深入浅出(Second Edit)>>

一.VC常用数据类型列表

说明:

(1)-------表示省略 (2)1Byte=8Bit,

字与机器有关,在8位系统中:字=1字节,16位系统中,1字=2字节,32位中:1字=4字节, 64位中1字=8字节.不要搞混这些概念.

二.常用数据类型转化及操作

2.1 数学类型变量与字符串相互转换(这些函数都在STDLIB.H里) (1)将数学类型转换为字符串可以用以下一些函数:

举例: _CRTIMP char * __cdecl _itoa(int, char *, int);//这是一个将数字转换为一个字符串类型的函数,最后一个int表示转换的进制 如以下程序:

int iTyep=3;

char *szChar; itoa(iType,szChar,2); cout<<szChar;//输出为1010

类似函数列表:

_CRTIMP char * __cdecl _itoa(int, char *, int);//为了完整性,也列在其中 _CRTIMP char * __cdecl _ultoa(unsigned long, char *, int); _CRTIMP char * __cdecl _ltoa(long, char *, int); _CRTIMP char * __cdecl _i64toa(__int64, char *, int);

_CRTIMP char * __cdecl _ui64toa(unsigned __int64, char *, int); _CRTIMP wchar_t * __cdecl _i64tow(__int64, wchar_t *, int);

_CRTIMP wchar_t * __cdecl _ui64tow(unsigned __int64, wchar_t *, int); _CRTIMP wchar_t * __cdecl _itow (int, wchar_t *, int);//转换为长字符串类型 _CRTIMP wchar_t * __cdecl _ltow (long, wchar_t *, int);

_CRTIMP wchar_t * __cdecl _ultow (unsigned long, wchar_t *, int); 还有很多,请自行研究

(2)将字符串类型转换为数学类型变量可以用以下一些函数: 举例: _CRTIMP int __cdecl atoi(const char *);//参数一看就很明了 char *szChar=”88”; int temp(0); temp=atoi(szChar); cout<<temp; 类似的函数列表:

_CRTIMP int __cdecl atoi(const char *); _CRTIMP double __cdecl atof(const char *); _CRTIMP long __cdecl atol(const char *); _CRTIMP long double __cdecl _atold(const char *); _CRTIMP __int64 __cdecl _atoi64(const char *); _CRTIMP double __cdecl strtod(const char *, char **);// _CRTIMP long __cdecl strtol(const char *, char **, int);// _CRTIMP long double __cdecl _strtold(const char *, char **); _CRTIMP unsigned long __cdecl strtoul(const char *, char **, int);

_CRTIMP double __cdecl wcstod(const wchar_t *, wchar_t **);//长字符串类型转换为数学类型 _CRTIMP long __cdecl wcstol(const wchar_t *, wchar_t **, int); _CRTIMP unsigned long __cdecl wcstoul(const wchar_t *, wchar_t **, int); _CRTIMP int __cdecl _wtoi(const wchar_t *); _CRTIMP long __cdecl _wtol(const wchar_t *); _CRTIMP __int64 __cdecl _wtoi64(const wchar_t *); 还有很多,请自行研究

2.2.CString及string,char *与其他数据类型的转换和操作 (1)CString,string,char*的综合比较(这部分CSDN上的作者joise的文章

<< CString,string,char*的综合比较>>写的很详细,请大家在仔细阅读他的文章.

地址: 或参考附录: (2)转换:

VC\PV

●数学类型与CString相互转化

数学类型转化为CString 可用Format函数,举例: CString s; int i = 64; s.Format("%d", i)

CString转换为数学类型:举例 CString strValue("1.234"); double dblValue;

dblValue = atof((LPCTSTR)strValue);

●CString与char*相互转换举例

CString strValue(“Hello”); char *szValue;

szValue=strValue.GetBuffer(szValue);

也可用(LPSTR)(LPCTSTR)对CString// 进行强制转换. szValue=(LPSTR)(LPCTSTR)strValue; 反过来可直接赋值: char *szChar=NULL; CString strValue; szChar=new char[10]; memset(szChar,0,10); strcpy(szChar,”Hello”); strValue=szChar;

●CString 与 BSTR 型转换

CString 型转化成 BSTR 型

当我们使用 ActiveX 控件编程时,经常需要用到将某个值表示成 BSTR 类型.BSTR 是一种记数字符串,Intel平台上的宽字符串(Unicode),并且可以包含嵌入的 NULL 字符。

可以调用 CString 对象的 AllocSysString 方法将 CString 转化成 BSTR: CString str;

PV图与热力学第一定律的研究论“等温线判断法则”和“绝热线判断法则”
VC\PV 第五篇

2001年萍乡高等专科学校学报100l

第4期JournalofPingxia“gCollege\O.;

P~V图与热力学第一定律的研究

——论“等温线判断法则”和“绝热线判断法则”

黄敬东1田华2。牛竹A

(萍乡高等专科学校江西萍乡337000)

摘要:本二£将P—V图与热力学第一定律紧密结合起来,总结出简洁明了的“等温

线判断法则”和“鲍热线判断法则”,在研究理想气体各种准静态过程中系统温度和内能的

改变、作功和传热情况.各种循环过程中吸放热以及热机效率等课题中,相当方便有效。

关键词:P—V图热力学第一定律等温线绝热线法则

P—V图一般用,蓰描述系统状态参量问变化关系,热力学第一定律则常用来研究有关热现象中的能量转化情况。S;者发现,若将两者紧密结合起来,在解决热力学有关课题中将带来许多便利。,

一、P—V圈的物理实质和特点

P—V图是以横坦标表示体积V、纵坐标表示压强P的图

象。图中任何一点,都表示一定质量的某种气体的一个平衡状}p!。辱骞线

态.任何一条曲线都表示气体的一个准静态过程。理想气体几个

等值过程,通过任意点A的状态变化曲线如图一所示,等压线

为平行V轴的直线;等容线为平行P轴的直线;等温线为一簇

等轴双曲线。若状态沿等压线或等容线变化,则P或V愈大,温

度T成正比升高。

对于绝热线,由过程方程PvT=常数与等温过程方程PV一

常数比较可知,是一簇其斜率绝对值比同点等温线斜率绝对值

更大的曲线,表示一系列绝热过程。

二、热力学第一定律与P—V图的关系

热力学第一定律是关于热现象的能量守恒和转换定律。它

指出,一定物质系统Pf能的增量△u=u。一u-等于外界对它所

做的功与外界囱它传重的热量Q之和。其数学表达式为△u=

QtA。符号规定:系统内能增加,△U为正,反之为负;系统吸

热.Q为正,放热为负;外界对系统作功,A为正,反之,A为负。

对理想气体而言.内自i是温度的单值函数.该状态温度愈高,内

能愈大。由理想气体状态方程PV=nRT可知,对定量的理想气蕊酽睦

体,PV愈大处,T愈{i。可见,若定义等温线和P、V轴之间的区蛰酽象一图二

域为内部,则任一等锰.线外部之点所代表的气体状态,其温度必高于内部任一点所代表的状态。为

D收稿日期:200l一1(26

萍乡膏等专科掌植学报第四期

此,在P—V图中作出准静态过程曲线(以下简称过程曲线),根据它与等温线的关系.可迅速判断出过程变化中内能的变化关系。如图二所示,若状态l经任意准静态过程(以下简称过程)变到状态2是内部区间穿过等温线变化到外部,则状态2内能必高于状态l内能。

外界对系统所作的元功为dA=一PdV,显然,在P—V图中:A一一N}Pdv。表明,外界对系统所作功之绝对值乃是过程曲线P。~R下的总面积,如图三所示。且容易看出,等容变化过程未作功,等压变化过程作功为矩形面i驴(V。一V,)。若△V>o,系统对外作功;△V<o,外界对系统作功。

÷PM2

?P绝热线

,p

PIp.0T,B}

。告}卜I∥外

图四I/2P^{内、、\0L:=一二吖驴+滞图五他l一一c“∥o’荭]耐图六剧三

绝热线表示绝热变化过程,故状态沿绝热线变化,表明外界与系统无热量交换。若状态变化曲线穿越绝热线,则表明外界与系统必有热量交换。如图四所示,若设绝热线与P,V轴间区域为内部,则当状态由内部区域穿越绝热线进入外部区域时,系统必定吸热,Q>o;反之,若状态由外部区域穿越绝热线i±入内部区域,则系统一定放热,Q<o。证明如下:

设有一摩尔理想气体从图五中状态A(P^,V一)穿越绝热线h仆】从内部进入外部区域到任意状态B(PB,VB)。过状态A和B分别作两条绝热线1和2。在绝热线2上取状态c(Pc,Vc),令Pc=P一,显然,Vc>“,故C点温度为

T。=学>学-T^

一摩尔理:基气体的熵为s=cvInT+RInV+s。。故在A态的嫡为s^=cvInT一+RInV^十s。,在C态的熵为Sc=CvInTc+RInVc+So。

因为CvInTc>CvInT^,RlnVc>RInVA,所以Sc>S^。

作T—si忌热图,如图六所示。由TA、Tc和s^、sc找到A、c点.显然,Ac任意过程曲线下积分面积大于零,《【由A状态变化到C状态时,JTdS=JdQ>O,该过程必定吸热。

因为在绝热线上状态发生任何变化,与外界无热量交换,其熵函数s不变。所以,在绝热线2上B态与c态等熵,sn—Sc,即B点与c点在同一条平行于T轴的直线上,显然,AB过程也必定吸热。

同理可以证明,状态A若穿越绝热线MN从外部进入内部区域到达任意状态B时,必定放热。

三、等温线判断法则和绝热线判断法则

综上所述.笔者认为,将P—V与热力学第一定律紧密结合起来,可归纳得出以下两个法则:】。等温缨判断法则:

若定义等温线和P、V轴之间的区域为内部,则理想气体的状态从内部区域经在意准静态过程穿过等温线变到外部状态时,系统温度升高、内能增加。反之,若状态由外部区域穿越等温线进入内部区域,则系统温度降低,内能减小。若两状态均在同一等温线上,则温度和内能均不变。

2.绝热皱判断法则:

若定义箕!热线与P、V轴之间的区域为内部,则理想气体的状态从内部区域经任意准静态过程穿过绝热线变到外部状态时,系统必吸热.Q>O。反之,若状态由外部区域穿越绝热线进入内部区域,则系统一定故热,Q<o。若状态沿绝热线变化,则系统与外界无热交换。

四、利用等温线判断法则和绝热线判断法则研究理想气体各等值过程中内能变化、作功与传热的规律

第四期萍乡膏辞专科学校学报

根据等温线判断}}则和绝热线判断法则,由图一很容易看出,理想气体各等值过程中内能变化、作功与传热情况规律如下:

等容升压:△V一(,△P<o,此过程中未作功,A—o。因△T>O,系统内能增加,△U>0。系统状态穿越绝热线由内向外,故吸热,Q>o。总之一句话:“等容升压——吸热变内能”。

等温膨胀:△T=c,系统内能不变,△u—o.因△>o,气体对外界作功,A<o。系统状态穿越绝热线由内到外,故吸热.Q>0。又可概括为一句话:“等温膨胀——吸热全作功”。

等压膨胀:△P—O,△v>0,系统对外作功,A<0。系统穿越等温线和绝热线由内部变到外部,故△T—o,系统内能增加,△u>o,吸热,Q>o。因此,可总结为:“等压膨胀——作功且增能”。

绝热膨胀;无热交受,Q—o。因△V>o,系统对外界作功,A<o。系统状态由外向内穿越等温线,故△T<o,系统内能减少,△u<o。因此,该过程规律便为:“绝热膨胀——作功耗内能”。

若状态变化相反,由P—v图特点,采用上述两个判断法则,很容易得出:“等容降压——放热耗内能”;“等温压缩一一放热耗外功”;“等压压缩——耗功耗内能”;“绝热压缩一~增能靠外功”。

以上各等值过程q,,若将“>o”用“+”表示,“<o”用“一”表示,则状态参量和能量传递情况可利用上述法则通过观寮图一直接归纳出下表~\墼变量\~过程

等容升压△V0

0△P+△T+△U+AQ+O0降压

膨胀

压缩+O0OO++

0等温等压膨雕压缩膨胀

压缩十OO++l绝热++++O

显然,利用等温线:埘断法则和绝热线判断法则,判断各等值过程状态参量变化与能量转换情况,易理解,易记忆,简洁明了,迅速准确。

例一,有一摩尔理想气体由初态A(P。,V。)分别经等压膨胀、等温膨胀和绝热膨胀变到未态B、C、D,它们的体积均为V:,如图七所示。问这三种膨胀过程中哪种内能增加最多?哪种作功最多?哪种吸热最多?

解:如图七.由于经等压膨胀后末态B位于等温线Ac之

外,经绝热膨胀后末态r)在等温线Ac之内,经等温膨胀后末

态c在等温线Ac之一二,根据等温线判断法则,有;Te>Tc>

T。。由此可知,该气体经等压膨胀后内能增加,经绝热膨胀后内

能减少,un>Uc>U“,即这三种过程中等压膨胀内能增加最

多。O.一V

观察三条过程曲线面积大小,一眼便可看出:等压膨胀过程

作功Ar最多,绝热膨腓过程作功As最少,等温膨胀作功At居

中,即:AP>AT>AB。图七

过c处作绝热线Ec可知,B处于EC线之外,D处于Ec线之内。根据绝热线判断法则,AB过程吸热最多,AC过程吸热次之,AD过程不吸热,即三过程中等压膨胀吸热最多。

五、利用等温线判断法则可方便地判断各过程中温度变化情况,并求出过程中温度最高或最低点。如前所述,在P—v图中,等温线是一簇等轴双曲线。离原点愈远的等温线,相应的温度愈高。因此.要判断各过程中温度最高或最低点,只要作出一条或数条等温线与过程曲线相切就行了。与

萍乡高等专科学柱学报第四轺

位置最高的等温线相切处,便是过程中温度最高点;与位置最低

的等温线相切处,便是过程中温度最低点。如图八所示,M为最.

勰筹裟戮…琳…:

“’…‘『r.1对于最高或最低温度的位置,求法如下:根据等温线判断法则,作一条与过程曲线相切的等温线。因’;\抵离a<,,、<■图八;\厂<1K:■寓盖黧霉驾蚕荔篓煮慧三蒜三嚣黧萎。亡型‰温线斜率为≥一{『。因切点处等温线的斜率等于过程曲线方

程的斜率,即一苦一K,据此可求出切点的位置坐标,此即温度

最高或最低点。

六、利用绝:帐线判断法则可方便地判断各过程中吸放热变化情况.并求出过程中吸放热转折点。

如前所述,列用绝热线判断法则,可以很容易判断出任一过程是吸热还是故热,而且过于存在吸放热转折情况的过程,笔者发现,还可利用该法则迅速找出其转折点。具体方法如下:

对任一过l!曲线,只要能作出一条绝热线与之相切,便可判定该过程存在吸放热转折情况,且切点便是吸放热转折点,如图九所示P点。(如无一个切点,则该过程无吸放热转折情况,例如等压、等容变化、 F温变化,便是纯吸热或纯放热过程。)

转折点位置,可如下求出:

设在P—v图中,某过程曲线为P=P(Vj,则其斜率为K=羚,而绝热线必满足泊松方程pV7一常数.故可球出绝热线斜率为K’一羚一一7寺.显然,在切点处有K—K’,据此求出切点P、V值,此即吸放热转折点之位置坐标。

+p(106P^)

吣、15一舡、’

≯:卜一劫j.口l^、《n醇.c‘

o’丁亍i≯mI)

图十o叶Wm')图十一圉九

例二,o.1摩尔单原子理想气体,经历一准静态过程abc,,其中ab.bc均为直线,如图十所示。(1)求气体在£bc过程中的温度变化最高点。(2)该过程中是否总是吸热?若发生吸放热转变,则转折点在何处?

解:(1)作一条与过程曲线bc相切的等温线,设切点为N,根据等温线判断法则,则N点就是abc过程中温度最高点。N点温度Tx的具体求法如下:

bc过程曲线应满足两点直线方程等等一毒害j毛

化简得

其斜率蔓P一2—0.jV①K=南=一o.j

即P—o.5V显然,N。氯等温线的斜率应等于K,于是一专一K=~o.5

代人①,僻得切点坐标为

VN=2×103m5,PN一1.O×105Pa

第四期萍乡高等专科学校学报

故N点的温度萎,T。=百F2—1订页FrPNVN1.O×105X2×1013一240.7K

‘2)在图十中分别作1、2两条绝热线,如图十一所示。观察可知,绝热线1与ab相交,绝热线:!与bc有2个交点。根据绝热线判断法则。a穿过绝热线1进人外部b,则ab是一个吸热过程,bc是一个先吸热后放热的过程.bc过程存在吸放热转折点。

作绝热线3与bc相切于d,根据绝热线判断法则.d点就是bc过程的吸放热转折点。其坐标(R,、rd)可求出如下:

绝热线斜率为K’一一7苦.

显然.d点绝热线斜率应等于bc过程曲线斜率K,即

~7导=吨5

本例中理想气体为单原子分子,自由度为i=3,故②

7:半一要10③

Pd≈o.8×105PaVd≈2.3×101m3代入②式,解得

七、利用绝热线判断法则有利于快捷解决热机效率问题

热机的效率为。一会一鱼云垒一l一鲁,其中Q。、Q:分别代表热机工作物质在一个循环巾所吸收和放出的热量。建’于制冷机,制冷系数为£=睾.其中A—Q,一Q。,Q,代表高温处放出的热量.Q:代表低温处吸收的热量。

为此,计算热机的效率,首先必须迅速准确判断出工作物质在~个循环过程中何处吸热、何处放热。经过实践,笔者认为.要做好这项工作,最有力的武器还是应用绝热线判断法则。

例如,卡诺循环过程是由两个等温过程和两个绝热过程所

组成,如图十二所示。dj绝热线判断法则,很容易确定:等温过程

ah,状态变化由内向外,故吸热Q,;等温过程cd。状态变化由外

向内,故放热Q二。所以,只要依据等温过程交换热量公式计算出

Q,和Q:之值,便可由:致率公式计算出卡诺热机的效率了。

对于其它各种循环.如狄塞尔循环、斯特林循环等等,尽管

组成该循环的具体过稻!不同,但必定都存在吸热与放热过程,均

可用绝热判断法则迅速准确判断出何过程吸热、何过程放热。于

是,可利用公式。V

日一1~等.计算出各种循环热机的效率了。

e同样可迅速予以求出,j圣|九对于制冷机.显然仿上述方法,也可迅速判断何过程吸热Q。,何过程放热Q,。由此,制冷系数

综上所述,将P—v图与热力学第一定律结合起来得出的等温线判断法则和绝热判断法则,用来研究理想气体各种难静态过程中系统温度和内能的改变、作功和传热情况.各种循环过程中吸放热以及热机效率等课题,是非常方便和有效的。各高校有关专业热学教师、学生和热力工程科技人员、熟练掌握P—v图的特点和等温线判断法则、绝热线判断法则.是十分必要和有益的。

参考文献:

1.李椿、章立源、钱尚武,《热学》,人民教育出版社,】978。

2.梁绍蒙、刘昌年、盛正华,《普通物理学,第二分册:热学》,高等教育出版社,1989。

3.程守株、江之水.《普通物理学(1册)》.人民教育出版社.1982年修订拳。责任编辑:刘锦域

GT1660介绍及PvAPI使用的简单说明
VC\PV 第六篇

一、GT1660相机的基本介绍

AVT GigE Prosilica GT1660 200万像素相机Prosilica GT1660是德国Allied Vision Technologies公司 (德国AVT)生产的一款200万像素千兆网接口 (符合GigE Vision协议)数字相机。GT1660是一款专门用于极端温度条件和照明波动变化环境的坚固型摄像机。GT1660提供精确自动光圈控制,用户可通过固定孔径值来

二、GT1660相机的驱动

目前GT1660相机主要有两款驱动及开发包支持开发使用: 1. AVT GigE PvAPI SDK及驱动程序 2. AVT VIMBA SDK及驱动程序

其中VIMBA为AVT公司出品的最新驱动及开发包,它支持ARMv7系统和OpenMP.ARM系统。这两个系统可应用在机器视觉系统中的紧凑且高性价比的主机中。Vimba提供的是与平台无关的基于C和C++的APIs,并且Vimba支持交叉平台开发方式,这会使用户使用Vimba软件开发工具包时非常方便。然而VIMBA开发工作是基于Microsoft Visual Studio 2005平台以上开发的,不支持VC6.0的开发。由于本项目中核心算法需要VC6.0环境,于是在此项目中依旧使用PvAPI驱动程序经行开发。

三、PvAPI基本调试过程如下

3.1 图像采集及显示模块软件流程如下,

1. 通过调用PvInitialize函数初始化PvAPI模块以获取动态链接库函数资源。 2. 调用PvCameraListEx函数枚举电脑系统上所有的 Allied Vision

Technologies cameras 并提取出需要操作的相机操作接口(本测量系统会提取到Prosilica GT1660相机操作句柄)。 3. 调用PvCameraOpen函数打开待操作的相机。

4. 通过相机参数设定函数PvAttrUint32Set 设定相机初始曝光值、电控镜头

5. 6. 7. 8. 9.

驱动时间及视频图像帧格式等等参数。

调用PvCaptureStart函数发出开始采集图像命令。

通过调用PvCaptureQueueFrame函数刷新采集的图像帧

调用 MFC 图像处理封装类实现测量软件界面视频图像的实时显示输出。 调用PvCaptureEnd函数停止图像采集。

调用PvUnInitialize函数释放操作系统申请的PvAPI系统资源。

3.2相机使用中的基本语句 1)PvAPI初始化命令 PvInitialize():

初始化PvAPI模块,没有参数,返回值如下:

ePvErrSuccess没有错误

ePvErrResources, 操作系统对命令不识别 ePvErrInternalFault, 出现内部错误

2)打开相机命令 a) PvCameraListEx()

列出当前计算机下所有可用相机的网口,并将相机标识或ID赋予*pList。

返回值为系统当前相机的数量,

b) PvCameraOpen()

根据PvCameraListEx()中提供的相机标识打开相机。

返回值为

ePvErrSuccess没有错误

ePvErrAccessDenied, 在该模式下,相机不能打开 ePvErrNotFound, 找不到相机

ePvErrUnplugged, 指令结束后才找到相机(相机之前未供电) ePvErrBadParameter, 相机的参数出现问题

ePvErrResources, 上位机(计算机)返回的命令无效 ePvErrInternalFault, 出现内部故障

ePvErrBadSequence, API 未初始化或相机已被打开

3)进行图像捕捉与采集 a)PvCaptureStart()

开启相机传输图面模式。 返回值为

ePvErrSuccess没有错误

ePvErrBadHandle, 相机句柄无效 ePvErrUnplugged, 相机未供电

ePvErrResources, 上位机(计算机)返回的命令无效 ePvErrInternalFault, 出现内部故障

ePvErrBadSequence, API 未初始化或相机已被打开

b)PvCaptureQueueFrame()

为相机获得的图像开启排列帧缓存区 返回值为

ePvErrSuccess没有错误

ePvErrBadHandle, 相机句柄无效 ePvErrUnplugged, 相机未供电 ePvErrQueueFull, 排列帧已满

ePvErrResources, 上位机(计算机)返回的命令无效 ePvErrInternalFault, 出现内部故障 ePvErrBadSequence, API 未初始化

4)相机基本参数设置命令

例如:

a)_ TimeStampFrequency – Uint32 – R/C

单位:Hz

相机的时钟频率,TimeStampValue的时基

PvAttrUint32Set(Camera, "TimeStampFrequency", 100); // 100Hz

b) FrameStartTriggerMode – Enum – R/W

帧频触

发发模式,为枚举型命令,参数为:Freerun,SyncIn1SyncIn2 SyncIn3SyncIn4,FixedRate,Software.

Freerun:设置了相机的最大帧频,

FixedRate: 设置相机的帧频,具体帧频由FrameRate决定。 PvAttrEnumSet(Camera, "FrameStartTriggerMode ", “FixedRate”);

VC\PV

c) FrameRate – Float32 – R/W

范围:相机帧频范围,单位:Hz

需要和FrameStartTriggerMode被设置成FixedRate,控制相机使用指定的帧频。

PvAttr Float32Set(Camera, "FrameRate ", 500); // 500us

d) ExposureValue – Uint32 – R/W

范围:相机曝光时间范围单位:us 设置曝光时间

PvAttrUint32Set(Camera, "ExposureValue", 10000); // 10000 us

本项目中使用的参数设置语句如下所示:

e)Command命令为相机执行命令的一些语句 如:AcquisitionStart相机开始采集. AcquisitionStop相机停止采集

.

5)关闭相机

a)PvCaptureQueueClear() 清空相机帧数列

ePvErrSuccess没有错误

ePvErrBadHandle, 相机句柄无效 ePvErrInternalFault, 出现内部故障 ePvErrBadSequence, API 未初始化

b)PvCaptureEnd() 关闭图像捕捉流

四.GT1660相机错误代码

绝大多数PvAPI函数返回的是tPvErr-type 错误代码 现将错误代码列如下表格

VC++常用功能详解
VC\PV 第七篇

常用功能代码目录

在View中如何得到Doc中的数据?

在Doc中如何通知相关的View更新显示?

在Doc中如何得到与它相关的视图Views?

怎样得到应用程序类?VC\PV

怎样得到应用程序的主框架类Frame?

怎样在自定义类中得到当前视图View类?

怎样在框架类中得到当前文档Doc类?

怎样在自定义类中得到当前文档Doc类?

获取所有菜单项的数目。

设置菜单的风格。

SDI单文档状态栏编程

VC++头文件的包含顺序问题。

几种DC之间的区别

在绘图之前擦除屏幕

CSocket类网络通信编程步骤

在View中如何得到Doc中的数据?

在Doc中如何通知相关的View更新显示?

在Doc中如何得到与它相关的视图Views?

怎样得到应用程序类?

怎样得到应用程序的主框架类Frame?

怎样在自定义类中得到当前视图View类?

怎样在框架类中得到当前文档Doc类?

怎样在自定义类中得到当前文档Doc类?

获取所有菜单项的数目。

设置菜单的风格。

SDI单文档状态栏编程

VC++头文件的包含顺序问题。

几种DC之间的区别

在绘图之前擦除屏幕

CSocket类网络通信编程步骤

在View中如何得到Doc中的数据?

为了显示和修改文档类的数据,在CView类中有一指向相应文档类对象的指针变量m_pDocument。m_pDocument在CView中被说明为指向CDocument类的指针,而在具体的应用中文档类一般都是CDocument类的派生类,必须对m_pDocument指针进行强制类型转换才能利用它检索CDocument派生类的特有数据。

为此AppWizard在CView的派生类中专门生成了一成员函数GetDocument()来完成这一转换。

但是按照C++的编程风格,一个类中的数据要尽量使用private

型,同时给出两个访问的成员函数Get()和Set()。这样得到数据就要用如下形式:

在Doc中如何通知相关的

View更新显示?

在CDocument的派生类中调用以下语句:

在Doc中如何得到与它相关的视图Views?

在CDocument

的派生类中,要得到与它相关的用于显示的视图可调用以下语句: 怎样得到应用程序类?

怎样得到应用程序的主框架类Frame?

在任何地方可使用以下形式得到:

VC\PV

怎样在自定义类中得到当前视图View类?

程序中往往有程序员自已增加的类,例如用户生成的一个对话框类。在这些自定义类中要得到当前的视图View类时,可以使用以下方法:

怎样在框架类中得到当前文档Doc类?

怎样在自定义类中得到当前文档Doc类?

获取所有菜单项的数目。

A、 以CMenu

类为基类派生一个CCustomMenu类,CCustomMenu类常用于菜单的绘制。

数,代码如下:

设置菜单的风格。

A、以CMenu类为基类派生一个CCustomMenu类,CCustomMenu类常用于菜单的绘制。

B、在CCustomMenu类的头文件中定义一个CMenuItem结构体,代码如下:

VC++里使用信号量实现线程同步与互斥
VC\PV 第八篇

一、在vc里实现线程同步与互斥运行,你需要对一下几个函数进行研究学习与掌握使用:

1、CreateThread() //创建线程的函数

2、CreateSemaphore() //创建信号量的函数

3、WaitForSingleObject() //

4、ReleaseSemaphore() //

*相关函数有:

CreateProcess () //创建进程的函数

Beginthread() //创建线程的函数

OpenSemaphore()

WaitForMultipleObjects()

(有兴趣者可以对相关函数进行研究学习)

二、第一步:你需要首先学会在vc里创建线程

1、这里提供创建线程的函数是:CreateThread()

函数的原型是:

HANDLE CreateThread(

LPSECURITY_ATTRIBUTES lpThreadAttributes,// SD

SIZE_TdwStackSize,// initial stack size

LPTHREAD_START_ROUTINE lpStartAddress,// thread functionVC\PV

LPVOIDlpParameter,// thread argument

DWORDdwCreationFlags,// creation option

LPDWORDlpThreadId// thread identifier

);

函数说明: 创建一个线程,线程指定要执行的函数或者代码块。

函数有六个参数,要理解六个参数分别是干什么用的。下面说明参数的使用:

参数1:

lpThreadAttributes:指向SECURITY_ATTRIBUTES型态的结构的指针。在Windows 98中忽略该参数。在Windows NT中,NULL使用默认安全性,不可以被子线程继承,否则需要定义一个结构体将它的bInheritHandle成员初始化为TRUE,一般是NULL。

参数2:

dwStackSize,设置初始栈的大小,以字节为单位,如果为0,那么默认将使用与调用该函数的线程相同的栈空间大小。任何情况下,Windows根据需要动态延长堆栈的大小。

参数3:

lpStartAddress,指向线程函数的指针,即函数入口。形式:@函数名,函数名称没有限制,但是必须以下列形式声明:

DWORD WINAPI 函数名 (LPVOID lpParam) ,格式不正确将无法调用成功。

比如一下程序1中的函数fun1可以这有定义: DWORD WINAPI Fun1(LPVOID IpParameter); //有点麻烦

调用的时候是: hThread1 = CreateThread(NULL,0,Fun1,NULL,0,NULL);

但是这有写函数有点不习惯,有点麻烦,所以可以这么来定义函数:void fun1();,但是调用的时候要这么写:

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>

void Fun1(LPVOID p);

void main()

{

HANDLE hThread1;VC\PV

char *a="hello fun1!";

hThread1 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Fun1,a,0,NULL); getch();

CloseHandle(hThread1);

}

void Fun1(LPVOID p)

{

printf("%s\n",(char *)p);

}

向控制台打印:

参数5:

dwCreationFlags :线程标志,可取值如下

(1)CREATE_SUSPENDED(0x00000004):创建一个挂起的线程,注:传0x00000004

(2)0:表示创建后立即激活。

(3)STACK_SIZE_PARAM_IS_A_RESERVATION(0x00010000):dwStackSize参数指定初始的保留堆栈的大小,否则,dwStackSize指定提交的大小。该标记值在Windows 2000/NT and Windows Me/98/95上不支持。

参数6:

lpThreadId:保存新线程的id。

(各参数说明完毕,注:参数说明来自百度文档)

函数返回值:

函数成功,返回线程句柄;函数失败返回false。

若不想返回线程ID,设置值为NULL。

到这你会在vc里面创建线程了吗?

学习以上知识后,我们就会创建线程了,接下来我们要让线程同步与互斥执行。

三、让线程同步与互斥执行

为了能够会使用线程同步与互斥执行,我们需要对一下函数进行研究学习。

1、信号量的创建(基础是要了解什么是信号量以及信号量的控制) 函数是:CreateSemaphore

函数原型:

HANDLECreateSemaphore(

LPSECURITY_ATTRIBUTESlpSemaphoreAttributes,// SD

LONGlInitialCount,// initial count

LONGlMaximumCount,// maximum count

LPCTSTRlpName// object name

);

参数说明如下:

lpSemaphoreAttributes SECURITY_ATTRIBUTES,指定一个SECURITY_ATTRIBUTES结构,或传递零值(将参数声明为ByVal As Long,并传递零值)——表示采用不允许继承的默认描述符。该参数定义了信号量的安全特性

lInitialCount Long,设置信号量的初始计数。可设置零到lMaximumCount之间的一个值

lMaximumCount Long,设置信号量的最大计数

lpName String,指定信号量对象的名称。用vbNullString可创建一个未命名的信号量对象。如果已经存在拥有这个名字的一个信号量,就直接打开现成的信号量。这个名字可能不与一个现有的互斥体、事件、可等待计时器或文件映射的名称相符(注:来自百度文档)

提供资料如下:

2、信号量(Semaphores)

信号量对象对线程的同步方式与前面几种方法不同,信号允许多个线程同时使用共享资源,这与操作系统中的PV操作相同。它指出了同时访问共享资源的线程最大数目。它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目。在用CreateSemaphore()创建信号量时即要同时指出允许的最大资源计数和当前可用资源计数。一般是将当前可用资源计数设置为最大资源计数,每增加一个线程对共享资源的访问,当前可用资源计数就会减1,只要当前可用资源计数是大于0的,就可以发出信号量信号。但是当前可用计数减小到0时则说明当前占用资源的线程数已经达到了所允许的最大数目,VC\PV

不能在允许其他线程的进入,此时的信号量信号将无法发出。线程在处理完共享资源后,应在离开的同时通过ReleaseSemaphore()函数将当前可用资源计数加1。在任何时候当前可用资源计数决不可能大于最大资源计数。

PV操作及信号量的概念都是由荷兰科学家E.W.Dijkstra提出的。信号量S是一个整数,S大于等于零时代表可供并发进程使用的资源实体数,但S小于零时则表示正在等待使用共享资源的进程数。

P操作申请资源:

(1)S减1;

(2)若S减1后仍大于等于零,则进程继续执行;

(3)若S减1后小于零,则该进程被阻塞后进入与该信号相对应的队列中,然后转入进程调度。

V操作 释放资源:

(1)S加1;

(2)若相加结果大于零,则进程继续执行;

(3)若相加结果小于等于零,则从该信号的等待队列中唤醒一个等待进程,然后再返回原进程继续执行或转入进程调度。

信号量包含的几个操作原语:

CreateSemaphore() 创建一个信号量

OpenSemaphore() 打开一个信号量

ReleaseSemaphore() 释放信号量

WaitForSingleObject() 等待信号量

(注:来自百度文档) 知道什么是信号量了,怎么创建信号量了,那么接下来就学会如何控制信号量了

3、信号量控制实现线程同步与互斥(相识p、v原语)

学习研究函数:

WaitForSingleObject();

ReleaseSemaphore();

配合使用。(这两函数由读者自己完成)

提供的代码示例如下:

程序1如下:

#include <Windows.h>

#include <iostream>

#include <stdio.h>

#include<conio.h>

#include<process.h>

#include<winbase.h>

HANDLE s;

void Fun1();

void Fun2();

void main()

{

HANDLE hThread1;

HANDLE hThread2;

s=CreateSemaphore(NULL,1,1,NULL);

if(s){

hThread1 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Fun1,NULL,0,NULL); hThread2 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Fun2,NULL,0,NULL); }

getch();

CloseHandle(s);

CloseHandle(hThread1);

CloseHandle(hThread2);

}

void Fun1()

{

while(true)

{

WaitForSingleObject(s,INFINITE);

printf("A");

Sleep(60000);

ReleaseSemaphore(s,1,NULL);

}

}

void Fun2()

{

while(true)

{

WaitForSingleObject(s,INFINITE);

Sleep(2000);

printf("B");

ReleaseSemaphore(s,1,NULL);

}

}

此程序有两线程,一个打印字符A,一个打印字符B,两线程同步互斥执行,当线程函数fun1先抢到资源,那么线程函数fun2就等待,实现了互斥访问资源,同时又同步执行。

VC++培训教材
VC\PV 第九篇

本文来源:https://www.dagaqi.com/chuangyezhidao/24885.html

《VC\PV VC、PE和天使投资是什么意思?有什么区别?.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式