nono.readonly truee begin 可以这样写吗?

该用户没有自我介绍
petesamprasNo1的
 wxWidgets是一个开源的跨平台的C++构架库(framework)(主页),它可以提供 GUI(图形用户界面)和其它工具。目前的2.x版本支持所有版本的Windows、带GTK+或Motif的Unix和MacOS。一个支持OS/2的版本正在开发中。  wxWidgets在最开始是由爱丁堡(Edinburgh)大学的人工智能应用学院开发的,主要是内部使用,而在1992年第一次公布。 2.x版本做了很大程度的改良,并且由Julian Smart, Robert Roebling, Vadim Zeitlin, Vaclav Slavik和更多其他的人所编写和维护。  wxWidgets的主体是由C++构建的,但你并不是必需通过C++才能使用wxWidgets.wxWidgets拥有许多其它语言的绑定(binding),使你在用其它语言编写程序的时候也可以使用wxWidgets.  * wxPython a Python binding,  * wxPerl a Perl binding,  * wxBasic a Basic binding,  * wxLua a Lua binding,  * wxJavaScript a JavaScript binding,  * wxJava a Java binding by Steve Perkins,  * wx4j a Java binding by Dave Dribin,  * wxRuby a Ruby binding,  * wxEiffel an Eiffel binding,  * wxHaskell a Haskell binding,  * wx.NET a C# binding for .NET/Mono,  * wxEuphoria a Euphoria binding,  * wxAda the start of an Ada binding for wxWidgets.  wxwidgets是一个 c++编写的用来提供gui开发的框架。它包含一个可以支持现今几乎所有操作系统(Version 2 currently supports all desktop versions of MS Windows, Unix with GTK+, Unix with Motif, and MacOS. An OS/2 port is in progress.)的GUI库和其他一些很有用的工具,提供了类似MFC的功能。而且,特别要说一下,这个c++lib还的新版本还提供了对掌上电脑的支持。当然,说到这里很多人会想到java对多系统的支持,其实这是不一样的,java的跨平台是建立在“中间代码”的基础上的,就是说需要在目标平台上安装java解释器;但是wxwidgets是c++库,经过编译后,他提供的是native级的机器码,在gui编程方面,这可是意味着很大的不同!  那么wxwidgets有什么特别之处呢?比起其他的跨平台gui库,有什么好处呢?  1、(不得不放在第一位的)就是他无论对于个人还是对于商业应用都是免费的!  ——它的主体框架的授权协议支持商业免费应用,其外围功能库中很多也是lgpl授权的,这无疑对于我等“0资本”的人来说是天大的好事。不同于gt之类的跨平台gui库。  2、 他是跨平台的gui库,支持的操作系统很全面,甚至支持pda(说不定过一段时间他都能够支持symbian了)。  —— 此跨平台非彼跨平台,它虽然不像java那样是“全面”的,而仅仅是gui库,但是gui是计算机编程中,最为麻烦、耗费时间、容易出现bug的部分,特别当你想要自己的软件运行在多个操作系统上的时候,开发和维护的难度让人难以想象。其实c++也是支持“跨平台”的,因为c++可以在任何平台上编译运行,之所以没几个人说他是跨平台的,主要问题就出在变量长度和各操作系统的gui(这里的“界面”我指得是很广义的)上,如果解决了gui的问题,基本上就解决了c++的“跨平台”问题——至少不用为每种平台都维护一份源代码了。  3、 wxwidgets提供的gui是大量使用宏的,这就意味着它是在尽可能的使用目标系统native的gui样式。  ——你可以访问wxwidgets网站,看看那些开发的软件的截图,全是系统native级别的。如果你开发了一个xp系统的软件的话,你的软件会仍然以“xp专有的‘小贱人’级别”的面貌展现在你面前。  4、 它支持的编译器也很多,而且borland也曾声明将在c++builderx2里边提供对wxidgets的支持——预览版都出来了。  ——其实我就是看到borland在c++不景气的时候,这么看重这个东东,甚至用它来做“王牌”,才开始注意到他的。当然,反过来,也正是borland的支持,才使他活力大发的。  5、 自然,有牛X支持,而且是开源的,wxwidgets一直都在快速稳健的开发中,其周边工具也越来越多。  —— 随着m$,c++成了“没落”的语言,但是不可否认,c++还是有很多用武之地的,所以根本不可能真正没落。没有了超牛X的支持,地球人自然开始寻求新的发展方式,wxwidgets这种开源免费,且允许商业应用的好东东,自然会被人们所重视。  当然,wxwidgets也有一些不足,比如官方文档不全(至少我觉得个官方的help远远不够我的菜鸟需求,大部分都是网络上零散的教程),特别是没有源代码的开发速度快;没有强大全面的rad工具;还没有形成很浓的产业气候,等等。但是,个人觉得它的好处绝对大于它的缺点,而且很有发展前途。
 既可以通过以下语句来创建  HWND hFontList = CreateWindow(&ListBox&,NULL,  WS_CHILD|WS_VISIBLE|LBS_STANDARD,  20,30,210,280,hWnd,HMENU(ID_LISTBOX),hInstance,NULL);  也可以在IDE中添加一个列表框资源并加载  HWND hFontList = GetDlgItem(hWnd, IDC_LIST1);  列表框是一种矩形窗口,它向用户提交一种可供选择的选项。  在创建列表框控制的语句中,最重要的是第三个字段。在这个字段中定义了该窗口类的样式:  WS_CHILD|WS_VISIBLE|LBS_STANDARD  在这里,我相信你已经不会对 LBS_STANDARD 标志是另一个大选项表中的一个选项感到惊奇。这是 Windows 处理问题时的一种惯用手法。下面列出了一些在通常情况下使用的选项:   LBS_MULTIPLESEL: 用户可以一次选择多个选项。 LBS_EXTENDEDSELP: 可以使用 Shift 键和鼠标器或专用的组合键来选择多个选项。 LBS_NOTIFY: 当列表框不具备这个样式时,其父窗口将不知道用户是否已经单击或双击列表框的某项。 LBS_STANDARD: 采用标准的列表框,它具有边框和 LBS_NOTIFY 样式。 LBS_OWNERDRAW: 当你想在列表框显示位图或其他非标准选项时,需要这个样式。 LBS_USETTABSTOPS: 在一个列表框内仿真多个栏目。 LBS_WANTKEYBOARDINPUT: 焦点在列表框的时候,程序可以接收键盘输入。  在这些可选的样式中,LBS_STANDARD 和 LBS_MULTIPLESEL 是最重要的两项。多选列表框工作起来就象 File Manager 的窗口那样,它们允许用户一次选择多个选项。  与列表框通信是一个相当复杂的课题。因此,这方面的深入讨论推迟到下一章进行。  在这里只给出几个简单的例子加以示范。如果需要把一个字符串加到列表框,你可以这样做:向列表框发送一条 LB_ADDSTRING 消息:  char * MyString[]=&skyline&;  SendMessage(hListBox,LB_ADDSTRING,0,LPARAM(MyString));  反过来,如果需要从列表框检索一个字符串,你可以这样做:首先使用 LB_GETCURSEL 消息来获取当前被选择的选项的索引:  int index = SendMessage(hFontList,LB_GETCURSEL,0,0);  等同于  int index = ListBox_GetCurSel(hFontList);  然后使用这个索引及 LB_GETTEXT 消息来检索这个字符串:  SendMessage(hListBox,LB_GETTEXT,index,LONG(lpszBuffer));  [编辑本段]ListBox在VB中:  ListBox作为vb的一个控件  中文名称列表框  可以通过vb的代码添加、修改列表框的内容  列表框可以在编程中显示各种需要的数值  方法:  Sub AddItem(Item As String, [Index])  VB.ListBox 的成员  添加一项到 Listbox 控件。  参数:  Item:所要添加的字符串  Index:可选,将字符串插入在第Index项前面  例:  Dim i%  For i = 1 To 10  List1.AddItem CStr(i)  Next  List1.AddItem &你好&, 5  效果:  1  2  3  4  你好  5  6  7  8  9  10  方法:  Sub AddString(CString s)  例:  Dim i%  For i = 1 To 10  List1.AddString( CStr(i))  Next  List1.AddItem &你好&, 5  效果:  1  2  3  4  你好  5  6  7  8  9  10  Sub Clear()  VB.ListBox 的成员  清除列表所有项。  参数:无  例:在AddItem的例子后添加  List1.Clear  这样你的列表框中的内容就都清除了  Sub RemoveItem(Index As Integer)  VB.ListBox 的成员  从一个 ListBox 控件中删除一项。  参数:  Index:你要删除的那项的索引  例:在AddItem的例子后添加  List1.RemoveItem 3  效果:  1  2  3  5  你好  6  7  8  9  10  属性:  Property Columns As Integer  VB.ListBox 的成员  返回/设置一个值,决定列表框为是在一列中(值为0时)垂直滚动,还是多个列中(值大于0时)水平滚动。  Property List(Integer) As String  VB.ListBox 的成员  返回/设置控件的列表部分中包含的项。  Property ListCount As Integer  只读  VB.ListBox 的成员  返回控件的列表部分中的项目数。  Property ListIndex As Integer  VB.ListBox 的成员  返回/设置该控件中当前选定项目的索引值。  Property MultiSelect As Integer  只读  VB.ListBox 的成员  返回/设置一个值,决定用户是否可以在一个控件中做多重选择。  Property NewIndex As Integer  只读  VB.ListBox 的成员  返回添加到控件中的最近一个项目的索引。  Property SelCount As Integer  只读  VB.ListBox 的成员  返回 ListBox 控件选定的项目数。  Property Selected(Integer) As Boolean  VB.ListBox 的成员  返回/设置控件中项目的选定状态。  Property Sorted As Boolean  只读  VB.ListBox 的成员  指出控件元素是否自动按字母顺序排序。  Property Style As Integer  只读  VB.ListBox 的成员  返回/设置一个值,决定是否将复选框显示在 ListBox 控件中。  Property Text As String  VB.ListBox 的成员  返回当前选中项的文本。  Property TopIndex As Integer  VB.ListBox 的成员  返回/设置在控件中显示在最顶端的项目。  -------------------------------------------------------------------  ListBox 和 ComboBox 为用户提供了选择。按照缺省规定,选项以垂直单列方式显示,也可以设置成多列方式。如果项目数量超过 ComboBox 或 ListBox 所能显示的数目,ScrollBar 自动出现在控件上。于是用户可以在列表中上下左右滚动。  ComboBox 兼有 TextBox 和 ListBox 两者的功能。该控件允许用户通过键入文本或选择列表中的项目来进行选择。  与其它含有单值的控件相反,例如 Label 的 Caption 属性或 TextBox 的 text 属性,ListBox 和 ComboBox 含有多个值或值的集合。在运行时用内置的方法增加、删除及保持集合中的值。要将几条项目添加到名为 List1 的 ListBox 中,其代码如下:  List1.AddItem &Paris&  List1.AddItem &New York&  List1.AddItem &San Francisco&  ListBox 和 ComboBox 是在有限空间为用户提供大量选项的有效方法。  详细信息 关于 ListBox 和 ComboBox 控件的详细信息,请参阅“使用 Visual Basic 的标准控件”。
佐佐木 收(ささき おさむ、日 - ):ボーカル?ギター 岩手県盛冈市出身 二松学舎大学卒业  &首谋者01(ゼロワン)& シングルA面曲をはじめとし、SCRIPTの多数の楽曲を手挂ける。  楽曲提供などのソロ活动で「ササキオサム」の名义も并用。旧芸名「佐々木収(読み同じ)」。    渡边 崇尉(わたなべ たかやす 、日 - ):ベース 东京都练马区出身  &首谋者02(ゼロツー)& 主にカップリング曲を手挂ける。一部の楽曲ではボーカルも担当。  简历:  1999年、に解散したMOON CHILDの佐々木收、渡辺崇尉が1999年4月に结成。  2000年、インディーズ活动を経て「トーキングヘッズ」でキティMMEよりメジャーデビュー。  2003年、再びインディーズに活动の场を移す。同年3枚のアルバムをリリース。  2004年、佐々木は元The Kaleidoscopeの石田匠とRicken'sを结成。2007年2月に活动休止。  2005年、佐々木が「ササキオサム」名义でAAAのデビュー曲「BLOOD on FIRE」に作词提供。その他の楽曲提供は后述参照。  [编集] ディスコグラフィ  单曲:  トーキングヘッズ (日)キティMME  TBS系「王様のブランチ」エンディングテーマ  Stripe Blue (日)キティMME  TBS系「ここがヘンだよ日本人」エンディングテーマ  Inspiration (日)キティMME  TBS系「COUNT DOWN TV」オープニングテーマ  サイレン (日)キティMME  STRANGER (日)キティMME  テレビ朝日系「完売剧场」エンディングテーマ  青春グローリー (日)インターチャネル  「剧场版 テニスの王子様 二人のサムライ The First Game」主题歌  ベイビーロマンチカ (日)フロンティアワークス  テレビアニメ「纯情ロマンチカ」エンディングテーマ  专辑:  gentleman's lib (日)AFD RECORDS  SCRIPT IS HERE (日)キティMME  Body Language (日)キティMME  Fantastic or Drastic (日)AFD RECORDS  Ultimate or Incomplete (日)AFD RECORDS  Nature or Man-made (日)AFD RECORDS  10strokes (日)AFD RECORDS  THE NEWEST VISTA (日)AFD RECORDS  [编集] パイロット盘  Frontier Spirits (日)(ライブ会场限定発売 1000枚限定) ※「Fantastic or Drastic」のパイロット盘  LIVE IN THE FUTURE(日) ※「THE NEWEST VISTA」のパイロット盘  [编集] DVD  SCRIPT Rock Inventions~MUSIC VIDEO CLIPS (日) ※通贩限定発売  キティMME时代のシングル曲と、インディーズで発表した曲のプロモーションビデオを収录。  其他活动:   SHIPS/シングル「TOKYO FRIEND☆SHIPS」作词?作曲?编曲?コーラス(ササキオサム) 渡边崇尉がベーシストとして参加   イケメン侍/シングル「Dear Prince?テニスの王子様达へ?」作曲(佐々木收)、编曲(SCRIPT)   加藤和树/シングル「impure love」作词(ササキオサム)   加藤和树/シングル「instinctive love」作词(ササキオサム)   AAA/シングル『Black&White』「Samurai heart-侍魂-」作词(ササキオサム)   AAA/シングル『ソウルエッジボーイ/キモノジェットガール』「ソウルエッジボーイ」作词(ササキオサム)   ajapai/シングル『声をかさねて...』収录曲「大车轮(Re-Vox Version)」にボーカリストとして参加(佐々木收)   AAA/シングル「BLOOD on FIRE」作词(ササキオサム)   江戸川すず(水树奈々)/アルバム『tactics サウンドファイル vol.2』収录「たったひとつの空」作曲(渡边崇尉)   dream/ミニアルバム『ナツイロ』収录曲「SHINE OF VOICE」作曲(ササキオサム)   长瀬実夕/シングル「snowy love」作曲(渡边崇尉)   Rin'/アルバム『飞鸟』収录曲「明日香川」作曲(佐々木收)   岛谷ひとみ/アルバム『シャンティ』収录曲「A.S.A.P.~as soon as possible~」作曲(佐々木収)   ロンドンブーツ1号2号/シングル『岬』収录曲「HEY! SLOT MACHINE」作词(佐々木収)  官方网站:[编辑本段]脚本(script)  脚本,用记事本写的程序代码  通常有VBScript,JAVAScript等,常出现在网页中。  Windows Script 是一种 Microsoft Windows 平台下的综合脚本底部结构。Windows Script 提供的脚本引擎、Visual Basic Scripting Edition 和 Microsoft JScript,可以被嵌入到 Windows 应用程序以及用于帮助用户为 Windows 应用程序编写脚本时得到一系列广泛的支持技术。  javascript : 主要用于构建动态WEB
嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。它一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等四个部分组成,用于实现对其他设备的控制、监视或管理等功能。  嵌入式系统一般指非PC系统,它包括硬件和软件两部分。硬件包括处理器/微处理器、存储器及外设器件和I/O端口、图形控制器等。软件部分包括操作系统软件(OS)(要求实时和多任务操作)和应用程序编程。有时设计人员把这两种软件组合在一起。应用程序控制着系统的运作和行为;而操作系统控制着应用程序编程与硬件的交互作用。  现在所说的嵌入式开发,通常都是指有嵌入式操作系统的那种,产品功能复杂了,单片机开发无法实现,需要用到嵌入式操作系统,也能体现出嵌入式操作系统的优势。嵌入式产品在航空、医疗、家电、消费电子、汽车电子、移动等众多领域都可以看到,应用领域极为广泛,所以现在嵌入式开发相当热门,并且具备非常好的发展前景!!  嵌入式系统的核心是嵌入式微处理器。嵌入式微处理器一般就具备以下4个特点:  1)对实时多任务有很强的支持能力,能完成多任务并且有较短的中断响应时间,从而使内部的代码和实时内核心的执行时间减少到最低限度。  2)具有功能很强的存储区保护功能。这是由于嵌入式系统的软件结构已模块化,而为了避免在软件模块之间出现错误的交叉作用,需要设计强大的存储区保护功能,同时也有利于软件诊断。  3)可扩展的处理器结构,以能最迅速地开展出满足应用的最高性能的嵌入式微处理器。  4)嵌入式微处理器必须功耗很低,尤其是用于便携式的无线及移动的计算和通信设备中靠电池供电的嵌入式系统更是如此,如需要功耗只有mW甚至μW级。  嵌入式计算机系统同通用型计算机系统相比具有以下特点:  1.嵌入式系统通常是面向特定应用的嵌入式CPU与通用型的最大不同就是嵌入式CPU大多工作在为特定用户群设计的系统中,它通常都具有低功耗、体积小、集成度高等特点,能够把通用CPU中许多由板卡完成的任务集成在芯片内部,从而有利于嵌入式系统设计趋于小型化,移动能力大大增强,跟网络的耦合也越来越紧密。  2.嵌入式系统是将先进的计算机技术、半导体技术和电子技术与各个行业的具体应用相结合后的产物。这一点就决定了它必然是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。  3.嵌入式系统的硬件和软件都必须高效率地设计,量体裁衣、去除冗余,力争在同样的硅片面积上实现更高的性能,这样才能在具体应用中对处理器的选择更具有竞争力。  4.嵌入式系统和具体应用有机地结合在一起,它的升级换代也是和具体产品同步进行,因此嵌入式系统产品一旦进入市场,具有较长的生命周期。  5.为了提高执行速度和系统可靠性,嵌入式系统中的软件一般都固化在存储器芯片或单片机本身中,而不是存贮于磁盘等载体中。  6.嵌入式系统本身不具备自举开发能力,即使设计完成以后用户通常也是不能对其中的程序功能进行修改的,必须有一套开发工具和环境才能进行开发!
shmap  基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。  此实现假定哈希函数将元素适当地分布在各桶之间,可为基本操作(get 和 put)提供稳定的性能。迭代 collection 视图所需的时间与 HashMap 实例的“容量”(桶的数量)及其大小(键-值映射关系数)成比例。所以,如果迭代性能很重要,则不要将初始容量设置得太高(或将加载因子设置得太低)。  HashMap 的实例有两个参数影响其性能:初始容量 和加载因子。容量是哈希表中桶的数量,初始容量只是哈希表在创建时的容量。加载因子是哈希表在其容量自动增加之前可以达到多满的一种尺度。当哈希表中的条目数超出了加载因子与当前容量的乘积时,则要对该哈希表进行 rehash 操作(即重建内部数据结构),从而哈希表将具有大约两倍的桶数。  通常,默认加载因子 (.75) 在时间和空间成本上寻求一种折衷。加载因子过高虽然减少了空间开销,但同时也增加了查询成本(在大多数 HashMap 类的操作中,包括 get 和 put 操作,都反映了这一点)。在设置初始容量时应该考虑到映射中所需的条目数及其加载因子,以便最大限度地减少 rehash 操作次数。如果初始容量大于最大条目数除以加载因子,则不会发生 rehash 操作。  如果很多映射关系要存储在 HashMap 实例中,则相对于按需执行自动的 rehash 操作以增大表的容量来说,使用足够大的初始容量创建它将使得映射关系能更有效地存储。  注意,此实现不是同步的。如果多个线程同时访问一个哈希映射,而其中至少一个线程从结构上修改了该映射,则它必须保持外部同步。(结构上的修改是指添加或删除一个或多个映射关系的任何操作;仅改变与实例已经包含的键关联的值不是结构上的修改。)这一般通过对自然封装该映射的对象进行同步操作来完成。如果不存在这样的对象,则应该使用 Collections.synchronizedMap 方法来“包装”该映射。最好在创建时完成这一操作,以防止对映射进行意外的非同步访问,如下所示:  Map m = Collections.synchronizedMap(new HashMap(...));  由所有此类的“collection 视图方法”所返回的迭代器都是快速失败的:在迭代器创建之后,如果从结构上对映射进行修改,除非通过迭代器本身的 remove 方法,其他任何时间任何方式的修改,迭代器都将抛出 ConcurrentModificationException。因此,面对并发的修改,迭代器很快就会完全失败,而不冒在将来不确定的时间发生任意不确定行为的风险。  注意,迭代器的快速失败行为不能得到保证,一般来说,存在非同步的并发修改时,不可能作出任何坚决的保证。快速失败迭代器尽最大努力抛出 ConcurrentModificationException。因此,编写依赖于此异常的程序的做法是错误的,正确做法是:迭代器的快速失败行为应该仅用于检测程序错误。  使用示例:  HashMap a = new HashMap();  a.put(&name&, &abcdef&); // key是name,value是字符串abcdef  System.out.println(a.get(&name&));// 根据key取得其值并输出  List list = new ArrayList();  list.add(a); // 加入1题所创建的hashmap  a = new HashMap(); // 创建另一个hashmap  a.put(&name&, &123456&);//key是name,value是字符串123456  list.add(a);// 加入另一个hashmap
与 COM 一样,COM+ 基于二进制组件和基于接口的编程。通过使用透明 RPC 层,可以跨越进程和计算机边界进行远程方法调用。正如 COM 组件那样,COM+ 组件可以在成品中升级和扩展,而不会对使用它们的客户端应用程序造成负面影响。  与 MTS 一样,COM+ 支持分布式事务和基于角色的安全性。它提供内置线程池方案,该方案与 MTS 的线程池方案一样透明。COM+ 编程模型同样利用侦听通过声明性属性向开发人员公开平台服务。但是,COM+ 比 MTS 更进一步地利用了基于属性的编程。除了事务性服务和集成安全性外,COM+ 还公开自定义对象构造、同步、对象池等服务。COM+ 的其他新功能(如排队组件和 COM+ 事件)也通过可配置的属性公开。  COM+并不是COM的新版本,我们可以把它理解为COM的新发展,或者为COM更高层次上的应用。COM+的底层结构仍然以COM为基础,它几乎包容了COM的所有内容。有一种说法这样认为,COM+是COM、DCOM和 MTS(Microsoft Transaction Server)的集成,这种说法有一定的道理,因为COM+确实综合了这些技术要素。但更重要的一点是,COM+倡导了一种新的概念,它把COM组件软件提升到应用层而不再是底层的软件结构,它通过操作系统的各种支持,使组件对象模型建立在应用层上,把所有组件的底层细节留给操作系统。   COM是个开放的组件标准,它有很强的扩充和扩展能力,从COM到DCOM,再到MTS的发展过程也充分说明了这一点。对COM有使用经验的读者一定可以感觉到,虽然COM已经改变了Windows程序员的应用开发模式,把组件的概念融入到 Windows应用中,但是由于种种原因,DCOM和MTS的许多优越性还没有为广大的Windows程序员所认识。MTS针对企业应用和Web应用的特点,在COM/DCOM的基础上又添加了许多功能和特性,包括事务特性、安全模型、管理和配置等,MTS使COM成为一个完整的组件体系结构。由于历史的原因,COM、DCOM和MTS相互之间并不很融洽,难以形成统一的整体,不过,这种状况很快就要结束,因为COM+将把这三者有效地统一起来,形成一个全新的、功能强大的组件体系结构,并且把DCOM和MTS的各种优势以更为简捷的方式带给Windows 2000程序员和用户。   COM+不再局限于COM的组件技术,它更加注重于分布式网络应用的设计和实现,已经成为 Microsoft系统平台策略和软件发展策略的一部分。COM+继承了COM几乎全部的优势,同时又避免了COM实现方面的一些不足。COM+紧紧地与操作系统结合起来,通过系统服务为应用程序提供全面的服务。  COM组件类型:  进程内组件:组件是在主调应用程序的进程范围内运行,是以DLL方式实现的。组件的实现是快速的,但由于和应用程序公用一个进程,导致了不安全的因素。  进程外组件:它又可分为两类。本地服务器进程组件,它是组件与调用组件者在同一机器上;远程服务器进程组件,它是组件使用远程过程调用RPCs和客户应用程序进行通信。
由操作系统实现的所有系统调用所构成的集合即程序接口或应用编程接口(Application Programming Interface,API)。是应用程序同系统之间的接口。  Linux系统调用,包含了大部分常用系统调用和由系统调用派生出的的函数。  一、进程控制:  fork 创建一个新进程  clone 按指定条件创建子进程  execve 运行可执行文件  exit 中止进程  _exit 立即中止当前进程  getdtablesize 进程所能打开的最大文件数  getpgid 获取指定进程组标识号  setpgid 设置指定进程组标志号  getpgrp 获取当前进程组标识号  setpgrp 设置当前进程组标志号  getpid 获取进程标识号  getppid 获取父进程标识号  getpriority 获取调度优先级  setpriority 设置调度优先级  modify_ldt 读写进程的本地描述表  nanosleep 使进程睡眠指定的时间  nice 改变分时进程的优先级  pause 挂起进程,等待信号  personality 设置进程运行域  prctl 对进程进行特定操作  ptrace 进程跟踪  sched_get_priority_max 取得静态优先级的上限  sched_get_priority_min 取得静态优先级的下限  sched_getparam 取得进程的调度参数  sched_getscheduler 取得指定进程的调度策略  sched_rr_get_interval 取得按RR算法调度的实时进程的时间片长度  sched_setparam 设置进程的调度参数  sched_setscheduler 设置指定进程的调度策略和参数  sched_yield 进程主动让出处理器,并将自己等候调度队列队尾  vfork 创建一个子进程,以供执行新程序,常与execve等同时使用  wait 等待子进程终止  wait3 参见wait  waitpid 等待指定子进程终止  wait4 参见waitpid  capget 获取进程权限  capset 设置进程权限  getsid 获取会晤标识号  setsid 设置会晤标识号  二、文件系统控制  1、文件读写操作  fcntl 文件控制  open 打开文件  creat 创建新文件  close 关闭文件描述字  read 读文件  write 写文件  readv 从文件读入数据到缓冲数组中  writev 将缓冲数组里的数据写入文件  pread 对文件随机读  pwrite 对文件随机写  lseek 移动文件指针  _llseek 在64位地址空间里移动文件指针  dup 复制已打开的文件描述字  dup2 按指定条件复制文件描述字  flock 文件加/解锁  poll I/O多路转换  truncate 截断文件  ftruncate 参见truncate  umask 设置文件权限掩码  fsync 把文件在内存中的部分写回磁盘  2、文件系统操作  access 确定文件的可存取性  chdir 改变当前工作目录  fchdir 参见chdir  chmod 改变文件方式  fchmod 参见chmod  chown 改变文件的属主或用户组  fchown 参见chown  lchown 参见chown  chroot 改变根目录  stat 取文件状态信息  lstat 参见stat  fstat 参见stat  statfs 取文件系统信息  fstatfs 参见statfs  readdir 读取目录项  getdents 读取目录项  mkdir 创建目录  mknod 创建索引节点  rmdir 删除目录  rename 文件改名  link 创建链接  symlink 创建符号链接  unlink 删除链接  readlink 读符号链接的值  mount 安装文件系统  umount 卸下文件系统  ustat 取文件系统信息  utime 改变文件的访问修改时间  utimes 参见utime  quotactl 控制磁盘配额  三、系统控制  ioctl I/O总控制函数  _sysctl 读/写系统参数  acct 启用或禁止进程记账  getrlimit 获取系统资源上限  setrlimit 设置系统资源上限  getrusage 获取系统资源使用情况  uselib 选择要使用的二进制函数库  ioperm 设置端口I/O权限  iopl 改变进程I/O权限级别  outb 低级端口操作  reboot 重新启动  swapon 打开交换文件和设备  swapoff 关闭交换文件和设备  bdflush 控制bdflush守护进程  sysfs 取核心支持的文件系统类型  sysinfo 取得系统信息  adjtimex 调整系统时钟  alarm 设置进程的闹钟  getitimer 获取计时器值  setitimer 设置计时器值  gettimeofday 取时间和时区  settimeofday 设置时间和时区  stime 设置系统日期和时间  time 取得系统时间  times 取进程运行时间  uname 获取当前UNIX系统的名称、版本和主机等信息  vhangup 挂起当前终端  nfsservctl 对NFS守护进程进行控制  vm86 进入模拟8086模式  create_module 创建可装载的模块项  delete_module 删除可装载的模块项  init_module 初始化模块  query_module 查询模块信息  *get_kernel_syms 取得核心符号,已被query_module代替  四、内存管理  brk 改变数据段空间的分配  sbrk 参见brk  mlock 内存页面加锁  munlock 内存页面解锁  mlockall 调用进程所有内存页面加锁  munlockall 调用进程所有内存页面解锁  mmap 映射虚拟内存页  munmap 去除内存页映射  mremap 重新映射虚拟内存地址  msync 将映射内存中的数据写回磁盘  mprotect 设置内存映像保护  getpagesize 获取页面大小  sync 将内存缓冲区数据写回硬盘  cacheflush 将指定缓冲区中的内容写回磁盘  五、网络管理  getdomainname 取域名  setdomainname 设置域名  gethostid 获取主机标识号  sethostid 设置主机标识号  gethostname 获取本主机名称  sethostname 设置主机名称  六、socket控制  socketcall socket系统调用  socket 建立socket  bind 绑定socket到端口  connect 连接远程主机  accept 响应socket连接请求  send 通过socket发送信息  sendto 发送UDP信息  sendmsg 参见send  recv 通过socket接收信息  recvfrom 接收UDP信息  recvmsg 参见recv  listen 监听socket端口  select 对多路同步I/O进行轮询  shutdown 关闭socket上的连接  getsockname 取得本地socket名字  getpeername 获取通信对方的socket名字  getsockopt 取端口设置  setsockopt 设置端口参数  sendfile 在文件或端口间传输数据  socketpair 创建一对已联接的无名socket  七、用户管理  getuid 获取用户标识号  setuid 设置用户标志号  getgid 获取组标识号  setgid 设置组标志号  getegid 获取有效组标识号  setegid 设置有效组标识号  geteuid 获取有效用户标识号  seteuid 设置有效用户标识号  setregid 分别设置真实和有效的的组标识号  setreuid 分别设置真实和有效的用户标识号  getresgid 分别获取真实的,有效的和保存过的组标识号  setresgid 分别设置真实的,有效的和保存过的组标识号  getresuid 分别获取真实的,有效的和保存过的用户标识号  setresuid 分别设置真实的,有效的和保存过的用户标识号  setfsgid 设置文件系统检查时使用的组标识号  setfsuid 设置文件系统检查时使用的用户标识号  getgroups 获取后补组标志清单  setgroups 设置后补组标志清单  八、进程间通信  ipc 进程间通信总控制调用  1、信号  sigaction 设置对指定信号的处理方法  sigprocmask 根据参数对信号集中的信号执行阻塞/解除阻塞等操作  sigpending 为指定的被阻塞信号设置队列  sigsuspend 挂起进程等待特定信号  signal 参见signal  kill 向进程或进程组发信号  *sigblock 向被阻塞信号掩码中添加信号,已被sigprocmask代替  *siggetmask 取得现有阻塞信号掩码,已被sigprocmask代替  *sigsetmask 用给定信号掩码替换现有阻塞信号掩码,已被sigprocmask代替  *sigmask 将给定的信号转化为掩码,已被sigprocmask代替  *sigpause 作用同sigsuspend,已被sigsuspend代替  sigvec 为兼容BSD而设的信号处理函数,作用类似sigaction  ssetmask ANSI C的信号处理函数,作用类似sigaction  2、消息  msgctl 消息控制操作  msgget 获取消息队列  msgsnd 发消息  msgrcv 取消息  3、管道  pipe 创建管道  4、信号量  semctl 信号量控制  semget 获取一组信号量  semop 信号量操作  5、共享内存  shmctl 控制共享内存  shmget 获取共享内存  shmat 连接共享内存  shmdt 拆卸共享内存
通知套接口有请求事件发生.                   #include &winsock.h&          int PASCAL FAR WSAAsyncSelect ( SOCKET s, HWND hWnd,                          unsigned int wMsg, long lEvent );                   s 标识一个需要事件通知的套接口的描述符.          hWnd 标识一个在网络事件发生时需要接收消息的窗口句柄.          wMsg 在网络事件发生时要接收的消息.          lEvent 位屏蔽码,用于指明应用程序感兴趣的网络事件集合.           注释:          本函数用来请求Windows Sockets DLL为窗口句柄发一条消息-无论它何时检测到由lEvent参数指明的网络事件.要发送的消息由wMsg参数标明.被通知的套接口由s标识.          本函数自动将套接口设置为非阻塞模式.          lEvent参数由下表中列出的值组成.          值 意义          FD_READ 欲接收读准备好的通知.          FD_WRITE 欲接收写准备好的通知.          FD_OOB 欲接收带边数据到达的通知.          FD_ACCEPT 欲接收将要连接的通知.          FD_CONNECT 欲接收已连接好的通知.          FD_CLOSE 欲接收套接口关闭的通知.                   启动一个WSAAsyncSelect()将使为同一个套接口启动的所有先前的WSAAsyncSelect()作废. 例如,要接收读写通知,应用程序必须同时用FD_READ和FD_WRITE调用WSAAsyncSelect(),如下:          rc = WSAAsyncSelect(s, hWnd, wMsg, FD_READ|FD_WRITE);          对不同的事件区分不同的消息是不可能的.下面的代码将不会工作;第二个调用将会使第一次调用的作用失效,只有FD_WRITE会通过wMsg2消息通知到.                          rc = WSAAsyncSelect(s, hWnd, wMsg1, FD_READ);                          rc = WSAAsyncSelect(s, hWnd, wMsg2, FD_WRITE);          如果要取消所有的通知,也就是指出Windows Sockets的实现不再在套接口上发送任何和网络事件相关的消息,则lEvent应置为0.                          rc = WSAAsyncSelect(s, hWnd, 0, 0);                   尽管在本例中,WSAAsyncSelect()立即使传给该套接口的事件消息无效, 仍有可能有消息等在应用程序的消息队列中.应用程序因此也必须仍准备好接收网络消息-即使消息作废.用closesocket()关闭一个套接口也同样使 WSAAsyncSelect()发送的消息作废,但在closesocke()之前队列中的消息仍然起作用.          由于一个已调用accept()的套接口和用来接收它的侦听套接口有同样的属性, 任何为侦听套接口设置的的WSAAsyncSelect()事件也同样对已接收的套接口起作用.例如, 如果一个侦听的套接口有WSAAsyncSelect()事件FD_ACCEPT,FD_READ,FD_WRITE, 则任何在那个侦听的套接口上接收的套接口将也有FD_ACCEPT,FD_READ,FD_WRITE事件,以及同样的wMsg的值.若需要不同的 wMsg及事件,应用程序应调用WSAAsyncSelect(),将已接收的套接口和想要发送的新消息作为参数传递.          当某一套接口s上发生了一个已命名的网络事件,应用程序窗口hWnd会接收到消息wMsg.wParam参数标识了网络事件发生的套接口.lParam的低字指明了发生的网络事件.lParam的高字则含有一个错误代码.该错误代码可以是winsock.h中定义的任何错误.          错误代码和事件可以通过WSAGETSELECTERRORH和WSAGETSELECTEVENT宏从lParam中取出.定义如下:                   #define WSAGETSELECTERROR(lParam) HIWORD(lParam)                   #define WSAGETSELECTEVENT(lParam) LOWORD(lParam)  注意:在accept()调用和为改变事件或wMsg的WSAAsyncSelect()调用中有一个计时窗口.应用程序如果需要给侦听的和调用过accept()的套接口以不同的wMsg,它就应该在侦听的套接口上请求FD_ACCEPT事件, 然后在accept()调用后设置相应的事件.由于FD_ACCEPT从不发送给已连接的套接口,而FD_READ,FD_WRITE,FD_OOB及 FD_CLOSE也从不发送给侦听套接口,所以不会产生困难.          使用以上的宏将最大限度的提高应用程序的可移植性.          返回的可能网络事件如下:          值 意义          FD_READ 套接口s准备读          FD_WRITE 套接口s准备写          FD_OOB 带外数据准备好在套接口s上读.          FD_ACCEPT 套接口s准备接收新的将要到来的连接.          FD_CONNECT 套接口s上的连接完成.          FD_CLOSE 由套接口s标识的连接已关闭.  返回值:          0 若应用程序感兴趣的网络事件的声明成功.          SOCKET_ERROR 否则.可通过调用WSAGetLastError()返回特定的错误代码.  评价:          尽管WSAAsyncSelect()可以以多个事件的组合来调用,应用程序窗口还是会为每个网络事件接收一条消息.          如同select()函数,WSAAsyncSelect()会被频繁地调用来决定,何时一次数据转移操作(send()或recv())可以启动,并且可以立刻成功.尽管如此,健壮的应用程序必须做好这样的准备, 即它可能接收到消息及启动了一个会立即返回WSAEWOULDBLOCK的Windows Sockets API调用.例如,下列的事件序列是可能的:          (i) 数据到达套接口s;Windows Sockets传递WSAAsyncSelect消息.          (ii) 应用程序处理其它一些消息.          (iii) 在处理过程中,应用程序启动了ioctlsocket(s,FIONREAD...)并且注意到有数据准备好读.          (iv) 应用程序启动recv(s,...)来读数据.          (v) 应用程序循环处理下一条消息,最终到达WSAAsyncSelect消息,表示数据已准备好读.          (vi) 应用程序启动recv(s,...),但失败并有错误WSAEWOULDBLOCK.          其它的事件序列也是可能的.          Windows Sockets DLL不会不断地为某一特定的网络事件向一个应用程序发送消息. 如果已成功地向应用程序窗口发送了一特定事件的通知,对该应用程序窗口将不再为该网络事件发消息,直到应用程序调用函数隐含地重新通知该网络事件.          事件 重新通知函数          FD_READ recv()或recvfrom()          FD_WRITE send()或sendto()          FD_OOB recv()          FD_ACCEPT accept()          FD_CONNECT 无          FD_CLOSE 无          任何对重新通知函数的调用,即使失败,也会达到为相关事件发重新通知消息的效果.          对FD_READ,FD_OOB和FD_ACCEPT事件,消息传递是&水平触发&(level-triggered)的.这意味着,若调用了重新通知函数并且相关的事件对该调用仍有效,WSAAsyncSelect()消息就将传给应用程序.这为应用程序提供了事件驱动以及不必考虑在任一时刻到达的数据量的能力.考虑下列序列:          (i) Windows Sockets DLL在套接口s上接收100字节的数据并传递一个FD_READ消息.          (ii) 应用程序启动recv(s,buffptr,50,0)接收50字节.          (iii) 由于仍有数据未读,Windows Sockets DLL发送另一个FD_READ消息.                   根据以上语义,应用程序不必在收到FD_READ消息时读进所有可读的数据-对应于每一FD_READ消息进行一次recv()调用是恰当的.如果应用程序为一个FD_READ消息而启动了多个recv()调用,它将接收到多个FD_READ消息.这样的应用程序可能希望在开始recv()调用( 通过不为FD_READ事件置位的WSAAsyncSelect()函数调用)之前关闭FD_READ消息.          如果在应用程序初次调用WSAAsyncSelect()或当调用了重新通知函数时,有一个事件为真, 则会发送一个相应的消息.例如,若应用程序调用listen(),就会试图进行连接,然后应用程序调用WSAAsyncSelect()声明它需要为套接口接收FD_ACCEPT消息,Windows Sockets的实现就会立即传递一个FD_ACCEPT消息.          FD_WRITE事件处理起来稍有不同.FD_WRITE消息是在套接口第一次用connect()连接或由accept()接受,并且在send()或 sendto()以WSAWOULDBLOCK错误失败后缓冲区空闲时发送的.因此,应用程序可以假设发送可能在第一次FD_WRITE消息时开始,并持续到一次返回WSAEWOULDBLOCK的发送. 在这样的失败后,应用程序将被通知,FD_WRITE消息的发送又将可能.          FD_OOB事件只用在当套接口配置成独立接收带外数据时.如果一个套接口被配置成接收感兴趣的带外数据状态,带外数据将和普通数据等同视之,并且应用程序应该注册它感兴趣的方面,然后将接收FD_READ事件,而不是FD_OOB事件.应用程序可以设置或监控带外数据处理的方法(通过使用 setsockopt()或getsockopt()函数,及SO_OOBINLINE选项).          在FD_CLOSE消息中的错误代码指出套接口的关闭是正常的还是异常的.如果错误代码是0,则关闭是正常的;若错误代码是WSAECONNRESET,则套接口的虚套接口将被重置.这些只对SOCK_STREAM类型的套接口起作用.          FD_CLOSE消息在相应套接口的虚电路关闭指令接收到时发送.在TCP术语中,这意味着FD_CLOSE在连接进入了FIN WAIT或CLOSE WAIT状态时发送.这是远端对发送方进行了shutdown()调用或closesocket()调用的结果.          请注意你的应用程序将只会收到FD_CLOSE消息来指出虚电路的关闭.它不会收到FD_READ消息来表示该状况.  错误代码:          WSANOTINITIALISED 在使用本API前必须进行一次成功的WSAStartup()调用.          WSAENETDOWN WINDOWS SOCKETS实现已检测到网络子系统故障.          WSAEINVAL 指出指定的参数之一是非法的.          WSAEINPROGRESS 一个阻塞的Windows Sockets操作正在进行.          附加的错误代码可能在应用程序窗口接收到消息时被置.这些代码可以用WSAGETSELECTERROR宏从lParam中取出.对应于每个网络事件的可能错误代码为:          事件:FD_CONNECT          WSAEADDRINUSE 给定的地址已被使用.          WSAEADDRNOTAVAIL 指定的地址在本地机器不能使用.          WSAEAFNOSUPPORT 指定族的地址不能和本套接口同时使用.          WSAECONNREFUSED 连接的尝试被拒绝.          WSAEDESTADDRREQ 需要一个目的地址.          WSAEFAULT namelen参数不正确.          WSAEINVAL 套接口已经约束到一个地址.          WSAEISCONN 套接口已经连接.          WSAEMFILE 没有可用的文件描述符.          WSAENETUNREACH 此时网络不能从该主机访问.          WSAENOBUFS 无可用的缓冲区空间.套接口不能连接.          WSAENOTCONN 套接口没有连接.          WSAENOTSOCK 该描述符是文件,不是套接口.          WSAETIMEDOUT 试图连接超时,未建立连接.          事件:FD_CLOSE          WSAENETDOWN WINDOWS SOCKETS实现已检测到网络子系统故障.          WSAECONNRESET 连接由远端重建.          WSAECONNABORTED 由于超时或其它失败放弃连接.          事件:FD_READ          事件:FD_WRITE          事件:FD_OOB          事件:FD_ACCEPT          WSAENETDOWN WINDOWS SOCKETS实现已检测到网络子系统故障.  关于Windows Sockets提供者的说明:          Windows Sockets的提供者应确保消息可以成功地传给应用程序.如果PostMessag()操作失败,Windows Sockets的实现必须重发该消息-只要窗口存在.          Windows Sockets提供者应使用WSAMAKESELECTREPLY宏来构造消息中的lParam参数.          当套接口关闭时,Windows Sockets提供者应清除所有保留下来要发送给应用程序窗口的消息.然而应用程序必须准备好接收,放弃任何在closesocket()之前可能已经发送的消息.  参见:          select()
 LABEL——建立磁盘卷标命令  功能:建立、更改、删除磁盘卷标。  格式:LABEL[盘符:][卷标名]  使用说明:卷标名为要建立的卷标名,若缺省此参数,则系统提示键入卷标名或询问是否删除原有的卷标名;卷标名由1至11个字符组成。  HTML元素 - label  大字体 小字体  定义  为页面上的其它元素指定标签。  Specifies a label for another element on the page.  注释  要将 LABEL 绑定到其它的控件,请将 LABEL 元素的 FOR 属性设置为与该控件的 ID 相同。将 LABEL 绑定到控件的 NAME 属性毫无用处。但是,要提交表单,你必须为 LABEL 元素所绑定到的控件指定 NAME。  有两种方法给所指定的快捷键添加下划线。LABEL 元素的 rich text 支持可以在 ACCESSKEY 属性所指定的快捷键字符两侧加上 U 元素。如果你更愿意使用样式表(CSS)来应用样式,可以将该字符包含在 SPAN 中,并设置样式为“text-decoration: underline”。  如果用户单击 LABEL,则会先触发 LABEL 上的 onclick 事件,然后触发由 htmlFor 属性所指定的控件上的 onclick 事件。按下 LABEL 设定的快捷键将设置焦点但并不触发 onclick 事件。  标签不允许嵌套。  此元素在 Internet Explorer 4.0 及以上版本的 HTML 和脚本中可用。  此元素是内嵌元素。  此元素需要关闭标签。  --------------------------------------------------------------------------------  Label 控件显示的文本用户不能直接修改。如 TextBox 和 ScrollBar 这些没有自己的 Caption 属性的控件,可以用 Label 标识。在 Label 中实际显示的文本是由 Caption 属性控制的,该属性可以在设计时在“属性”窗口中设置或在运行时用代码赋值。  在缺省情况下,标题是 Label 控件中唯一的可见部分。但是,如果把 BorderStyle 属性设成 1(可以在设计时进行),那么 Label 就有了一个边框— 看起来象一个 TextBox。还可以通过设置 Label 的 BackColor、BackStyle、ForeColor 和 Font 属性,改变 Label 的外观。  改变 Label 尺寸以适应其内容  设计时可在“属性”窗口中指定单行 Label 的标题。但是如果要输入一个较长的或在运行时可能变化的标题,该怎么办呢?Label 提供了两种属性:AutoSize 和 WordWrap,帮助您改变控件尺寸以适合较长或较短的标题。  AutoSize 属性决定控件是否自动改变尺寸以适应其内容。如该属性设为 True,Label 就会根据其内容进行水平方向变化,  WordWrap 属性使 Label 根据其内容进行垂直方向变化,而保持其宽度不变,  注意 如果在 Controls.vbp 中运行 Controls.vbp 示例,就会发现为使 WordWrap 也工作,必须两个复选框都选中。这是因为,要想使 Label 的 WordWrap 属性起作用,就必须设置 AutoSize 为 True。只有在一个单字的宽度超过控件的当前宽度时,Label 的宽度才会增加。  详细信息 关于 Label 控件属性的详细信息,请参阅“使用 Visual Basic 的标准控件”。
 变量是用来存储值的所在处;它们有名字和数据类型。变量的数据类型决定了如何将代表这些值的位存储到计算机的内存中。在声明变量时也可指定它的数据类型。所有变量都具有数据类型,以决定能够存储哪种数据。  根据缺省规定,如果在声明中没有说明数据类型,则令变量的数据类型为 Variant。Variant 数据类型很象一条变色龙— 它可在不同场合代表不同数据类型。当指定变量为 Variant 变量时,不必在数据类型之间进行转换,Visual Basic 会自动完成各种必要的转换。  但是,如果知道变量确实总是存储特定类型的数据,并且还声明了这种特定类型的变量,则 Visual Basic 会以更高的效率处理这个数据。例如,存储人名的变量最好表示成 String 数据类型,因为名字总是由字符组成。  除变量外,数据类型也用于其它场合。在给属性赋值时,这个值就有数据类型;函数的参数也有数据类型。事实上,在 Visual Basic 中,凡是与数据有关的东西就与数据类型有关。  也可声明任何基本类型的数组。  详细信息 关于更详细信息,请参阅本章后面的“数组”部分。在“性能和兼容性的设计”中还将讨论通过选择数据类型来提高应用程序的性能。  声明带数据类型的变量  在使用非 Variant 变量之前,必须使用 Private、Public、Dim 或 Static 语句将变量声明为 As type。例如,下列语句分别声明了 Integer、Double、String 和 Currency 类型的变量:  Private I As Integer  Dim Amt As Double  Static YourName As String  Public BillsPaid As Currency  一个声明语句可将多个声明组合起来,请看下列语句:  Private I As Integer,Amt As Double  Private YourName As String,BillsPaid As Currency  Private Test,Amount,J As Integer  注意 如果不提供数据类型,则指定变量为缺省类型。在上例中,变量 Test 和 Amount 是 Variant 数据类型。如果由于其它编程语言的经验使人感到同一个声明语句中的所有变量都有相同的指定数据类型(此例中为 Integer),那么,此处的结果可能会令人感到新鲜。  Numeric 数据类型  Visual Basic 支持几种 Numeric 数据类型— Integer(整型)、Long(长整型)、Single(单精度浮点型)、Double(双精度浮点型)和 Currency(货币型)。与 Variant 类型相比,Numeric 类型占用的存储空间通常要少。  如果知道变量总是存放整数(如 12 )而不是带小数点的数字(如 3.57),就应当将它声明为 Integer 类型或 Long 类型。整数的运算速度较快,而且比其它数据类型占据的内存要少。在 For...Next 循环内作为计数器变量使用时,整数类型尤为有用。  详细信息 关于控制结构的详细资料,请参阅本章后面的“控制结构概述”。  如果变量包含小数,则可将它们声明为 Single、Double 或 Currency 变量。Currency 数据类型支持小数点右面 4 位和小数点左面 15 位;它是一个精确的定点数据类型,适用于货币计算。浮点(Single 和 Double)数比 Currency 的有效范围大得多,但有可能产生小的进位误差。  注意 浮点数值可表示为 mmmEeee 或 mmmDeee ,其中 mmm 是假数,而 eee 是指数(以 10 为底的幂)。Single 数据类型的最大正数值为 3.,或 3.4 乘以 10 的 38 次方;Double 数据类型的最大正数值是 1.32D+308 或 1.8 乘以 10 的 308 次方。用 D 将数值文字中的假数部分和指数部分隔开,就会导致将该值作为 Double 数据类型来处理。同样,用这种方式使用 E,也会导致将该值作为 Single 数据类型来处理。  Byte 数据类型  如果变量包含二进制数,则将它声明为 Byte 数据类型的数组。(本章后面的“数组”中将讨论数组)。在转换格式期间用 Byte 变量存储二进制数据就可保留数据。当 String 变量在 ANSI 和 Unicode 格式间进行转换时,变量中的任何二进制数据都会遭到破坏。在下列任何一种情况下,Visual Basic 都会自动在 ANSI 和 Unicode 之间进行转换:  读文件时  写文件时  调用 DLL 时  调用对象的方法和属性时  除一元减法外,所有可对整数进行操作的运算符均可操作 Byte 数据类型。因为 Byte 是从 0 - 255 的无符号类型,所以不能表示负数。因此,在进行一元减法运算时,Visual Basic 首先将 Byte 转换为符号整数。  所有数值变量都可相互赋值,也可对 Variant 类型变量赋值。 在将浮点数赋予整数之前, Visual Basic要将浮点数的小数部分四舍五入,而不是将小数部分去掉。  详细信息 关于 Unicode 和 ANSI 转换的详细信息,请参阅“国际化”。  String 数据类型  如果变量总是包含字符串而从不包含数值,就可将其声明为 String 类型。  Private S As String  然后可将字符串赋予这个变量,并用字符串函数对它进行操作。  S = &Database&  S = Left (S,4)  按照缺省规定,String 变量或参数是一个可变长度的字符串,随着对字符串赋予新数据,它的长度可增可减。 也可以声明字符串具有固定长度。可用以下语法声明一个定长字符串:  String * size  例如,为了声明一个长度为 50 字符的字符串,可用下列语句:  Dim EmpName As String * 50  如果赋予字符串的字符少于 50 个,则用空格将 EmpName 的不足部分填满。如果赋予字符串的长度太长,已不能成为定长字符串,则 Visual Basic 会直接截去超出部分的字符。  因为定长字符串用空格填充尾部多余的空间,所以在处理定长字符串时可发现,删除空格的 Trim 和 RTrim 函数是很有用的。  可将标准模块中的定长字符串声明为 Public 或 Private。在窗体和类模块中,必须将定长字符串声明为 Private。  详细信息 请参阅语言参考中的“Ltrim、RTrim Function 和 Trim 函数”。  交换字符串和数字  如果字符串表示数值,则可将字符串赋予数值变量。也可将数值赋予字符串变量。例如,将命令按钮、文本框和列表框放置在窗体中。在命令按钮的 Click 事件中输入下列代码。运行应用程序并单击命令按钮。  Private Sub Command1_Click ()  Dim intX As Integer  Dim strY As String  strY = &100.23&  intX = strY '将字符串传递给数值变量。  List1.AddItem Cos (strY) '将字符串中数值的余弦值。  '添加到列表框中。  strY = Cos (strY) '将余弦值传递给字符串变量。  Text1.Text = strY '在文本框中显示字符串。  End Sub  Visual Basic 会自动强制变量为适当的数据类型。在转换字符串和数值时要小心;如果传送字符串中的值不是数值,则在运行时会出错。  Boolean 数据类型  若变量的值只是“true/false”、“yes/no”、“on/off”信息,则可将它声明为 Boolean 类型。Boolean 的缺省值为 False。在下面的例子中,blnRunning 是 Boolean 变量,存储简单的 yes/no 设置。  Dim blnRunning As Boolean  '查看磁带是否在转。  If Recorder.Direction = 1 Then  blnRunning = True  End if  Date 数据类型  Date 和 Time 值既可包含在特定的 Date 数据类型中,又可包含在 Variant 变量中。一般的 Date 特性适用于这两种类型。  详细信息 请参阅《联机手册》的“高级变量主题”中的“在 Variant 变量中存储 Date/Time 值”部分。  当其它数值数据类型转换为 Date 时,小数点左边的值表示 Date 信息,小数点右边的值则代表 Time。午夜为 0,正午为 0.5。负数表示公元 1899 年 12 月 31 日之前的 Date。  Object 数据类型  Object 变量作为 32 位(4 个字节)地址来存储,该地址可引用应用程序中或某些其它应用程序中的对象。可以随后(用 Set 语句)指定一个被声明为 Object 的变量去引用应用程序所识别的任何实际对象。  Dim objDb As Object  Set objDb = OpenDatabase (&c:\Vb5\Biblio.mdb&)  在声明对象变量时,请试用特定的类,而不用一般的 Object(例如用 TextBox 而不用 Control,或者象上面的例子那样,用 Database 取代 Object)。运行应用程序之前,Visual Basic 可以决定引用特定类型对象的属性和方法。因此,应用程序在运行时速度会更快。在“对象浏览器”中列举了特定的类。  当使用其它应用程序的对象,并在“对象浏览器”中的“类”列表中列举对象时,不要用 Variant 或一般的 Object,而应声明对象。这样可确保 Visual Basic 能够识别引用的特定类型对象,在运行时解决引用问题。  详细信息 关于创建和指定对象以及对象变量的更详细信息,请参阅本章后面的“创建对象”部分。  转换数据类型  Visual Basic 提供了几种转换函数,可用来将值转换成特定数据类型。例如,用 CCur 函数将值转换成 Currency 类型:  PayPerWeek = CCur (hours * hourlyPay)  转换函数 将表达式转换成  Cbool Boolean  Cbyte Byte  Ccur Currency  Cdate Date  CDbl Double  Cint Integer  CLng Long  CSng Single  CStr String  Cvar Variant  CVErr Error  注意 对目标数据类型,传递到转换函数的值必须是有效的,否则会发生错误。例如,如果想把 Long 型数转换成 Integer 型数,那么,Long 型数必须在 Integer 数据类型的有效范围之内。  详细信息 在联机帮助中查找指定的转换函数。  Variant 数据类型  Variant 变量能够存储所有系统定义类型的数据。如果把它们赋予 Variant 变量,则不必在这些数据的类型间进行转换; Visual Basic 会自动完成任何必要的转换。例如:  Dim SomeValue '缺省为 Variant。  SomeValue = &17& 'SomeValue包含 &17&(双字符的串)。  SomeValue = SomeValue - 15 '现在, SomeValue 包含数值 2。  SomeValue = &U& & SomeValue '现在, SomeValue 包含 &U2& (双字符的串)。  不必过多关注 Variant 变量中数据的类型就可对 Variant 变量进行操作,但须避免落入陷阱。  如果对 Variant 变量进行数学运算或函数运算,则 Variant 必包含某个数。更详细的信息,请参阅《联机手册》中“高级变量主题”中的“变量中存储的 Numeric 值”部分。  如果正在连接两个字符串,则用 & & & 操作符而不用 & + & 操作符。更详细的信息,请参阅《联机手册》中“高级变量主题”中的“Variant 变量中存储的 Strings”部分。  除了可以像其它标准数据类型一样操作外,Variants 还包含三种特定值:Empty,Null 和 Error。  Empty 值  有时需要知道是否已将一个值赋予所创建的变量。在赋值之前,Variant 变量具有值 Empty。值 Empty 是异于0、零长度字符串 (&&) 或 Null 值的特定值。可用 IsEmpty 函数测试 Empty 值:  If IsEmpty (Z) Then Z = 0  当 Variant 变量包含 Empty 值时,可在表达式中使用它;将其作为 0 或零长度字符串来处理,这要根据表达式来定。  只要将任何值(包括 0、零长度字符串或 Null)赋予 Variant 变量,Empty 值就会消失。而将关键字 Empty 赋予 Variant 变量,就可将 Variant 变量恢复为 Empty。  Null 值  Variant 数据类型还可包含一特定值:Null。Null通常用于数据库应用程序,表示未知数据或丢失的数据。 由于在数据库中使用 Null 方法,Null 具有某些唯一的特性:  对包含 Null 的表达式,计算结果总是 Null。于是说 Null 通过表达式“传播”;如果表达式的部分之值为 Null,那么整个表达式的值也为 Null。  将 Null 值、含 Null 的 Variant 变量或计算结果为 Null 的表达式作为参数传递给大多数函数,将会使函数返回 Null。  Null 值经由返回 Variant 数据类型的内在函数传播。  也可用 Null 关键字指定 Null 值。  Z = Null  也可用 IsNull 函数测试 Variant 变量是否包含 Null 值。  If IsNull (X) And IsNull (Y) Then  Z = Null  Else  Z = 0  End If  如果将 Null 值赋予 Variant 以外的任何其它类型变量,则将出现可以捕获的错误。而将 Null 值赋予 Variant 则不会发生错误,Null 将通过包含 Variant 变量的表达式传播(尽管 Null 并不通过某些函数来传播)。可以从任何具有 Variant 返回值的函数过程返回 Null。  除非明确将 Null 赋予变量,否则变量不会设置成 Null 值,所以,如果不在应用程序中使用 Null,就不必书写测试 Null 和处理 Null 的程序。  详细信息 关于如何在表达式中使用 Null 的详细信息,请参阅语言参考的“Null”部分。  Error 值  在 Variant 中,Error 是特定值,指出已发生的过程中的错误状态。但是,与其它类型错误不同,这里并未发生正常的应用程序级的错误处理。因此,程序员或应用程序本身可根据 Error 值进行取舍。利用 CVErr 函数将实数转换成错误值就可建立 Error 值。  详细信息 关于如何在表达式中使用 Error 值,请参阅语言参考中的“CVErr 函数”部分。关于错误处理的信息,请参阅“调试代码和处理错误”。有关 Variant 数据类型的更详细信息,请参阅《联机手册》中的“高级变量主题”。[编辑本段]VB中的数据类型  数据类型概述  以下表格显示所支持的数据类型,以及存储空间大小与范围。  数据类型 存储空间大小 范围  Byte 1 个字节 0 到 255  Boolean 2 个字节 True 或 False  Integer 2 个字节 -32,768 到 32,767  Long  (长整型) 4 个字节 -2,147,483,648 到 2,147,483,647  Single  (单精度浮点型) 4 个字节 负数时从 -3. 到 -1.;正数时从 1. 到 3.  Double  (双精度浮点型) 8 个字节 负数时从 -1.32E308 到  -4.47E-324;正数时从4.47E-324 到 1.32E308  Currency  (变比整型) 8 个字节 从 -922,337,203,685,477.5808 到 922,337,203,685,477.5807  Decimal 14 个字节 没有小数点时为 +/-79,228,162,514,264,337,593,543,950,335,而小数点右边有 28 位数时为 +/-7.0335;最小的非零值为 +/-0.0001  Date 8 个字节 100 年 1 月 1 日 到 9999 年 12 月 31 日  Object 4 个字节 任何 Object 引用  String  (变长) 10 字节加字符串长度 0 到大约 20 亿  String  (定长) 字符串长度 1 到大约 65,400  Variant  (数字) 16 个字节 任何数字值,最大可达 Double 的范围  Variant  (字符) 22 个字节加字符串长度 与变长 String 有相同的范围  用户自定义  (利用 Type) 所有元素所需数目 每个元素的范围与它本身的数据类型的范围相同。  注意 任何数据类型的数组都需要 20 个字节的内存空间,加上每一数组维数占 4 个字节,再加上数据本身所占用的空间。数据所占用的内存空间可以用数据元数目乘上每个元素的大小加以计算。例如,以 4 个 2 字节之 Integer 数据元所组成的一维数组中的数据,占 8 个字节。这 8 个字节加上额外的 24 个字节,使得这个数组所需总内存空间为 32 个字节。  包含一数组的 Variant 比单独的一个数组需要多 12 个字节。
 模拟退火算法来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小。根据Metropolis准则,粒子在温度T时趋于平衡的概率为e-ΔE/(kT),其中 E为温度T时的内能,ΔE为其改变量,k为Boltzmann常数。用固体退火模拟组合优化问题,将内能E模拟为目标函数值f,温度T演化成控制参数t,即得到解组合优化问题的模拟退火算法:由初始解i和控制参数初值t开始,对当前解重复“产生新解→计算目标函数差→接受或舍弃”的迭代,并逐步衰减t值,算法终止时的当前解即为所得近似最优解,这是基于蒙特卡罗迭代求解法的一种启发式随机搜索过程。退火过程由冷却进度表(Cooling Schedule)控制,包括控制参数的初值t及其衰减因子Δt、每个t值时的迭代次数L和停止条件S。  1 . 模拟退火算法的模型  模拟退火算法可以分解为解空间、目标函数和初始解三部分。  模拟退火的基本思想:  (1) 初始化:初始温度T(充分大),初始解状态S(是算法迭代的起点), 每个T值的迭代次数L  (2) 对k=1,……,L做第(3)至第6步:  (3) 产生新解S′  (4) 计算增量Δt′=C(S′)-C(S),其中C(S)为评价函数  (5) 若Δt′&0则接受S′作为新的当前解,否则以概率exp(-Δt′/T)接受S′作为新的当前解.  (6) 如果满足终止条件则输出当前解作为最优解,结束程序。  终止条件通常取为连续若干个新解都没有被接受时终止算法。  (7) T逐渐减少,且T-&0,然后转第2步。  算法对应动态演示图:  模拟退火算法新解的产生和接受可分为如下四个步骤:  第一步是由一个产生函数从当前解产生一个位于解空间的新解;为便于后续的计算和接受,减少算法耗时,通常选择由当前新解经过简单地变换即可产生新解的方法,如对构成新解的全部或部分元素进行置换、互换等,注意到产生新解的变换方法决定了当前新解的邻域结构,因而对冷却进度表的选取有一定的影响。  第二步是计算与新解所对应的目标函数差。因为目标函数差仅由变换部分产生,所以目标函数差的计算最好按增量计算。事实表明,对大多数应用而言,这是计算目标函数差的最快方法。  第三步是判断新解是否被接受,判断的依据是一个接受准则,最常用的接受准则是Metropo1is准则: 若Δt′&0则接受S′作为新的当前解S,否则以概率exp(-Δt′/T)接受S′作为新的当前解S。  第四步是当新解被确定接受时,用新解代替当前解,这只需将当前解中对应于产生新解时的变换部分予以实现,同时修正目标函数值即可。此时,当前解实现了一次迭代。可在此基础上开始下一轮试验。而当新解被判定为舍弃时,则在原当前解的基础上继续下一轮试验。  模拟退火算法与初始值无关,算法求得的解与初始解状态S(是算法迭代的起点)无关;模拟退火算法具有渐近收敛性,已在理论上被证明是一种以概率l 收敛于全局最优解的全局优化算法;模拟退火算法具有并行性。  2 模拟退火算法的简单应用  作为模拟退火算法应用,讨论货郎担问题(Travelling Salesman Problem,简记为TSP):设有n个城市,用数码1,…,n代表。城市i和城市j之间的距离为d(i,j) i, j=1,…,n.TSP问题是要找遍访每个域市恰好一次的一条回路,且其路径总长度为最短.。  求解TSP的模拟退火算法模型可描述如下:  解空间 解空间S是遍访每个城市恰好一次的所有回路,是{1,……,n}的所有循环排列的集合,S中的成员记为(w1,w2 ,……,wn),并记wn+1= w1。初始解可选为(1,……,n)  目标函数 此时的目标函数即为访问所有城市的路径总长度或称为代价函数:  我们要求此代价函数的最小值。  新解的产生 随机产生1和n之间的两相异数k和m,若k (w1, w2 ,…,wk , wk+1 ,…,wm ,…,wn)  变为:  (w1, w2 ,…,wm , wm-1 ,…,wk+1 , wk ,…,wn).  如果是k&m,则将  (w1, w2 ,…,wk , wk+1 ,…,wm ,…,wn)  变为:  (wm, wm-1 ,…,w1 , wm+1 ,…,wk-1 ,wn , wn-1 ,…,wk).  上述变换方法可简单说成是“逆转中间或者逆转两端”。  也可以采用其他的变换方法,有些变换有独特的优越性,有时也将它们交替使用,得到一种更好方法。  代价函数差 设将(w1, w2 ,……,wn)变换为(u1, u2 ,……,un), 则代价函数差为:  根据上述分析,可写出用模拟退火算法求解TSP问题的伪程序:  Procedure TSPSA:  begin  init-of-T; { T为初始温度}  S={1,……,n}; {S为初始值}  termination=  while termination=false  begin  for i=1 to L do  begin  generate(S′form S); { 从当前回路S产生新回路S′}  Δt:=f(S′))-f(S);{f(S)为路径总长}  IF(Δt&0) OR (EXP(-Δt/T)&Random-of-[0,1])  S=S′;  IF the-halt-condition-is-TRUE THEN  termination=  E  T_  E  End  模拟退火算法的应用很广泛,可以较高的效率求解最大截问题(Max Cut Problem)、0-1背包问题(Zero One Knapsack Problem)、图着色问题(Graph Colouring Problem)、调度问题(Scheduling Problem)等等。  3 模拟退火算法的参数控制问题  模拟退火算法的应用很广泛,可以求解NP完全问题,但其参数难以控制,其主要问题有以下三点:  (1) 温度T的初始值设置问题。  温度T的初始值设置是影响模拟退火算法全局搜索性能的重要因素之一、初始温度高,则搜索到全局最优解的可能性大,但因此要花费大量的计算时间;反之,则可节约计算时间,但全局搜索性能可能受到影响。实际应用过程中,初始温度一般需要依据实验结果进行若干次调整。  (2) 退火速度问题。  模拟退火算法的全局搜索性能也与退火速度密切相关。一般来说,同一温度下的“充分”搜索(退火)是相当必要的,但这需要计算时间。实际应用中,要针对具体问题的性质和特征设置合理的退火平衡条件。  (3) 温度管理问题。  温度管理问题也是模拟退火算法难以处理的问题之一。实际应用中,由于必须考虑计算复杂度的切实可行性等问题,常采用如下所示的降温方式:  T(t+1)=k×T(t)  式中k为正的略小于1.00的常数,t为降温的次数
睡眠之后人体内部的许多生理功能会发生明显变化, 如心率减慢、血压下降、新陈代谢缓慢、呼吸次数减少。  睡眠之后体内变化最大研究最多的是脑电的变化。 人在白天清醒的状态下, 从正常脑电图上最常见的脑电波是阿尔伐(α)和贝它(β)波, 当一个人困倦时, 便会出现贼它(θ)波。 人们入睡后脑电变化总的趋势是, 频率变慢振幅增高。 一般把睡眠分为四个时期, 每个时期脑电波有着不同的表现。  本世纪五十年代, 有一位科学家在观察儿童睡眠的脑电变化时发现, 在睡眠过程中有一段时间脑电活动很特殊, 看起来不象是睡眠脑电图, 倒象是处于清醒状态。 在这段时间里, 脑电波频率变快, 振幅变低, 同时还表现出心率加快、血压升高、肌肉松弛、阴茎勃起, 最奇怪的是眼球不停地左右摆动。 为此科学家们把这一阶段的睡眠, 称为快速眼动睡眠, 又叫做异相睡眠, 也有人把它叫做积极睡眠 (active sleep)。  把快速眼动以外的其它睡眠, 称为慢波睡眠, 又叫做安静睡眠 (quiet sleep)。 有趣的是, 一个人入睡之后, 先进入一期睡眠, 继之出现二、三、四期睡眠, 然后由深变浅依次回返。 当返回到二期睡眠之后, 通常便出现快速眼动睡眠。 然后又进入另一个睡眠周期, 由浅入深再由深变浅, 间以快速眼动睡眠, 如此往复。 一夜约有4--5个周期, 每个周期大约 90分钟, 第一个周期长些, 以后的周期变短。  每次快速眼动持续时间的长短因人而异, 就一个人来说, 第一次出现快速眼动后, 大约持续5--10分钟, 以后加长, 最后一次可长达 40分钟。令人奇怪的是, 当一个人进入快速眼动睡眠之后如果把他唤醒, 他会报告说正在做梦, 而在慢波睡眠期间如果把他唤醒, 做梦的机会较少, 因此人们认为快速眼动睡眠和做梦是有一定联系的。科学家们只观察到这种现象是存在的, 但这究竟是为什麽, 却没有一个满意的答案。  有人提出睡眠不是消极的单纯休息, 快速眼动期是人们在对一天中所获得的信息进行加工整理使之条理化的过程。 不过这只是个猜测, 却未得到进一步的证实。  有的研究者观察到, 有的被试常常诉说他整夜都在做梦, 而这些人恰巧都是在快速眼动睡眠期间醒来的。 因此有的研究者认为, 诉说整夜都在做梦的人其实并不尽然, 只是他们在做梦的时候醒来了, 对梦记忆犹新历历在目, 因此形成了错觉。其实每个人都会在快速度眼动期间做梦, 只是大多数人醒来后把梦的内容忘掉了, 有的忘得一干二净, 便以为根本未做梦, 有的忘得不彻底尚能回忆起一些片断,次日可向别人诉说他夜里做了梦。  研究REM快速眼动睡眠,对人类大脑的作息调节方式,对生命的奥秘,养生,有着重要的意义。  ---------------------------------  Rem 语句  用来在程序中包含注释。语法Rem comment也可以使用如下语法:' commentcomment 参数是可选的,指要包括的任何注释文本。在 Rem 关键字与 comment 之间要加一个空格。说明如果使用行号或行标签,则可以从 GoTo 或 GoSub 语句转到一个 Rem 语句行。程序会从该 Rem 语句下面的第一条可执行语句继续执行。如果在其它语句行后使用 Rem 关键字,则必须使用冒号 (:) 与语句隔开。可以用一个撇号 (') 来代替 Rem 关键字。若使用撇号,则在其它语句行使用时不必加冒号。  ---------------------------------  REM摇滚乐队   1980年成立于佐治亚州的Athens,音乐风格基本上是Alternative Pop/ College Rock,成员为主唱Michael Stipe(乐队的核心人物及主要歌曲创作者)吉他手Peter Buck、贝司手Mike Mills、鼓手Bill Berry(1997年10月退出)  REM乐队为美国另类摇滚开创了新局面,在商业上和艺术上都取得了很大的成功。REM乐队,他们的队员是主唱迈克尔· 斯蒂普斯(Michael Stips)、吉他手彼得·巴克(Peter Buck)、贝司手迈克·米尔斯(Mike Mills)和鼓手比尔·贝里(Bill Berry),4人都是佐治大学的学生。他们把清脆、迷人的吉他片段和模糊、神秘的歌词同后朋克的风格结合在一起,并且把传统声响与现代声响相融合。无论是评论界还是音乐界都一致认为&REM&是另类摇滚的创始者之一。  推荐曲目 everybody hurts  Losing My Religion  country feedback  -------------------------------
 功 能: 随机数发生器  用 法: int random(int num);  程序例:  #include &stdlib.h&  #include &stdio.h&  #include &time.h&  /* prints a random number in the range 0 to 99 */  int main(void)  {  randomize();  printf(&Random number in the 0-99 range: %d\n&, random (100));  return 0;  }  注意:  在使用Random之前需要使用Randomize语句进行随机数种子的初始化。  例如:  var  a,i,,j:  begin  {RANDOMIZE;}  for j:=1 to 2 do  begin  for i:=1 to 10 do  begin  a:=random(1000);  writeln(a);        end.  这两组数据输出的是一样的结果,如果在程序前加上RANDOMIZE(即把大括号去掉)再运行程序,输出数据就不一样了.  RANDOM产生的是伪随机数或者说是用一种复杂的方法计算得到的序列值,因此每次运算时需要一个不同的种子值。种子值不同,得到的序列值也不同。因此也就是真正的随机数了。这也正是RANDOMIZE随机初始化的作用。 VB里用 NEW RANDOM()来表示初始化。[编辑本段]基本的Random函数  Math.random();  可以产生出0-1之间的任意小数,例如0.0933 或  0.986,有几个其他的函数可以用来改变产生的数字,从而可以更好的在你的影片中使用:  Math.round();  Math.ceil();  Math.floor();  这几个函数都是用来取得整数的,Math.round();是采用四舍五入方式取得最接近的整数。Math.ceil();是向上取得一个最接近的整数。Math.floor(); 和Math.ceil();相反,Math.floor();向下取得一个最接近的整数。  结合这些函数,你就可以这样写:  Math.round(Math.random());  这个表达式可以生成一个0.0和1.0之间的一个数,然后四舍五入取得一个整数。这样所生成的数字就是0或1。这个表达式可以用在各有50%的可能的情况下,例如抛硬币,或者true/false指令。  *10 是将你所生成的小数乘以10,然后四舍五入取得一个整数:  Math.round(Math.random()*10);  要创建一个1到10之间的随机数,可以这样写:  Math.ceil(Math.random()*10);  应为是Math.ceil向上取值,所以不会产生0。要创建一个5到20的随机数可以这样写  Math.round(Math.random()*15)+5;  也就是说,如果要创建一个从x到y的随机数,就可以这样写  Math.round(Math.random()*(y-x))+x;  x和y可以是任何的数值,即使是负数也一样。  要制作上面的那个例子,首先要创建一个按钮符号,拖动到主场景中,然后创建一个新的动态文本框,赋予动态文本框的变量名为“display”。创建的工作到此结束,下面来添加脚本.  选中按钮,打开actions窗口,输入下面的代码,你可以在下拉菜单中选择,也可以直接将下面的代码拷贝进去:  on (release) {  display = Math.round (Math.random ()*200)-100;  }  完成了,下面测试一下你的影片,你会注意到代码中的值遵循了那个公式。如果x =  -100, y =100,那么y-x=200, +x = -100.  随机数在flash中还可以有多种不同的应用。要让一个movieclip在随机的屏幕上不同的位置上出现,显示的位置在0到200之间,可以这样写,注意movieclip的实例名为“bob”.  bob._x = Math.round(Math.random()*200);  bob._y = Math.round(Math.random()*200);  或者随机的控制movieclip的大小(从0到100之间):  bob._width = Math.round(Math.random()*100);  bob._height = Math.round(Math.random()*100);  也可以随机的载入一个movieclip,如果你的movieclip的命名是&bob1&, &bob2&  一直到&bob5&,我们可以这样写。  i = Math.ceil(Math.random()*5);  attachMovie(&bob&+i, &fred&+i, 1);  运行这个代码以后。就会随机的载入一个movieclip,例如&bob3&,放在level 1  ,赋予实例名为&fred3&。  VB:  中 用rnd 函数返回一个随即函数  Function Rnd([Number]) As Single  VBA.Math 的成员  返回一个随机数  返回的范围在[1,0]内  PASCAL语言中的随机数语句  RANDOMIZE;{随机数激发器}  RANDOM(N);{表示产生[0,N)之间的随机整数,可以直接使用RANDOM语句表示随机产生一个[0,1)的数}  例:如果要随机取一个3位整数只需使用下列语句:  RANDOMIZE;  N:=TRUNC(RANDOM*900)+100;  既可。
 一种改进的字符串匹配算法,由D.E.Knuth与V.R.Pratt和J.H.Morris同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。  完全掌握KMP算法思想  学过数据结构的人,都对KMP算法印象颇深。尤其是新手,更是难以理解其涵义,搞得一头雾水。今天我们就来面对它,不将它彻底搞懂,誓不罢休。  如今,大伙基本上都用严蔚敏老师的书,那我就以此来讲解KMP算法。(小弟正在备战考研,为了节省时间,很多课本上的话我都在此省略了,以后一定补上。)  严老的《数据结构》79页讲了基本的匹配方法,这是基础。先把这个搞懂了。  80页在讲KMP算法的开始先举了个例子,让我们对KMP的基本思想有了最初的认识。目的在于指出“由此,在整个匹配的过程中,i指针没有回溯,”。  我们继续往下看:  现在讨论一般情况。  假设 主串:s: ‘s(1) s(2) s(3) ……s(n)’ ; 模式串 :p: ‘p(1) p(2) p(3)…..p(m)’  把课本上的这一段看完后,继续  现在我们假设 主串第i个字符与模式串的第j(j&=m)个字符‘失配’后,主串第i个字符与模式串的第k(k&j)个字符继续比较  此时,s(i)≠p(j), 有  主串: S(1)…… s(i-j+1)…… s(i-1) s(i) ………….  || (相配) || ≠(失配)  匹配串: P(1) ……. p(j-1) p(j)  由此,我们得到关系式  ‘p(1) p(2) p(3)…..p(j-1)’ = ’ s(i-j+1)……s(i-1)’  由于s(i)≠p(j),接下来s(i)将与p(k)继续比较,则模式串中的前(k-1)个字符的子串必须满足下列关系式,并且不可能存在 k’&k 满足下列关系式:(k&j),  ‘p(1) p(2) p(3)…..p(k-1)’ = ’ s(i-k+1)s(i-k+2)……s

我要回帖

更多关于 nohttpinterface true 的文章

 

随机推荐