让程序暂停30秒再运行

1、引入命名空间

using System.Threading;

2、挂起线程30秒

Thread.Sleep(30 * 1000);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
八、 实验内容和要求: 要求根据下面的功能说明描述实现模拟电梯控制软件 (一)电梯配置 1. 共有1个电梯 2. 共有maxfloor层楼层。maxfloor=9。 3. 中间层每层有上下两个按钮,最下层只有上行按钮,最上层只有上行按钮。每层都有相应的指示灯,灯亮表示该按钮已经被按下,如果该层的上行或者下行请求已经被响应,则指示灯灭 4. 电梯内共有maxfloor个目标按钮,表示有乘客在该层下电梯。有指示灯指示按钮是否被按下。乘客按按钮导致按钮指示灯亮,如果电梯已经在该层停靠则该按钮指示灯灭 5. 另有一启动按钮(GO)。当电梯停在某一楼层后,接受到GO信息就继续运行。如果得不到GO信息,等待一段时间也自动继续运行。 6. 电梯内设有方向指示灯表示当前电梯运行方向。 说明:由于本次实验不使用可视化框架,所以无法作到从图形界面上获取按钮请求。因此电梯按钮的设计,不在图形界面上体现,仅用来设计键盘的模拟输入。 (二)电梯的运行控制 1.电梯的初始状态是电梯位于第一层处,所有按钮都没有按下。 2.乘客可以在任意时刻按任何一个目标钮和呼叫钮。呼叫和目标对应的楼层可能不是电梯当前运行方向可达的楼层。 3. 如果电梯正在向I层驶来,并且位于I层与相邻层(向上运行时是I-1层或者向下运行时是I+1层)之间,则因为安全考虑不响应此时出现的I层目标或者请求。如果电梯正好经过了I楼层,运行在I楼层和下一楼层之间,则为了直接响应此时出现的I层目标或者请求,必须至少到达运行方向上的下一楼层然后才能掉头到达I楼层(假设掉头无须其它额外时间),如果I楼层不是刚刚经过的楼层则可以在任意位置掉头,此时掉头后经过的第一个楼层不可停。 4. 电梯系统依照某种预先定义好的策略对随机出现的呼叫和目标进行分析和响应。 5. 乘客数量等外界因素(可能导致停靠时间的长短变化)不予考虑。假设电梯正常运行一层的时间是5S,停靠目标楼层、上下乘客和电梯继续运行的时间是5S。 6. 当电梯停靠某层时,该层的乘客如果错误的按目标或呼叫按钮都不予响应。 7. 电梯停要某一层后,苦无目标和呼叫,则电梯处于无方向状态,方向指示灯全灭,否则电梯内某个方向的指示灯亮,表示电梯将向该方向运行。等接到“GO”信号后电梯立即继续运行。若无GO信号,则电梯在等了上下乘客和电梯继续运行时间后也将继续运行。 8. 当一个目标(呼叫)已经被服务后,应将对应的指示灯熄灭。 (三)电梯运行的控制策略 以下是几个候选策略: 1.先来先服务策略: 将所有呼叫和目标按到达时间排队,然后一一完成。这是相当简单的策略,只需要设计一个将呼叫和目标排队的数据结构。因为该策略效率也很低,所以没有实际的电梯采用这种策略。 2. 顺便服务策略: 顺便服务是一种最常见的简单策略。这种策略在运行控制中所规定的安全前提下,一次将一个方向上的所有呼叫和目标全部完成。然后掉转运行方向完成另外一个方向上的所有呼叫和目标。 可以采用设定目标楼层的办法来实现这个策略,即电梯向一个目标楼层运行,但这个楼层可以修改。具体策略如下: 1) 修改目标楼层的策略: a.如果电梯运行方向向上,那么如果新到一个介于当前电梯所处楼层和目标楼层之间,又可以安全到达的向上呼叫或者目标,将目标楼层修改为这个新的楼层。 b.如果电梯运行方向向下,那么如果新到一个介于当前电梯所处楼层和目标楼层之间,又可以安全到达的向下呼叫或者目标,将目标楼层修改为这个新的楼层。 2)确定新的目标楼层: 如果电梯向上运行,当它到达某个目标楼层后,则依照以下顺序确定下一个目标楼层: a.如果比当前层高的楼层有向上呼叫或者目标,那么以最低的高于当前楼层的有向上呼叫或者目标的楼层为目标。 b.如果无法确定目标楼层,那么以最高的向下呼叫或者目标所在楼层为电梯当前目标楼层。 c.如果无法确定目标楼层,那么以最低的向上呼叫所在楼层为电梯当前的目标楼层。 d.如果仍然不能确定目标楼层(此时实际上没有任何呼叫和目标),那么电梯无目标,运行暂停。 如果电梯向下运行,依照以下顺序确定下一目标楼层: a.如果比当前层低的楼层有向下呼叫或者目标,那么以最高的低于当前楼层的有向下呼叫或者目标的楼层为目标。 b.如果无法确定目标楼层,那么以最低的向上呼叫或者目标所在楼层为电梯当前目标楼层。 c.如果无法确定目标楼层,那么以最高的向下呼叫楼层为目标楼层。 d.如果仍然不能确定目标楼层(此时实际上没有任何呼叫和目标),那么电梯无目标,运行暂停。 3)最快响应策略: 响应所有的现在存在的所有呼叫和目标所需时间(采用不同方案电梯停靠时间相同,所以不必考虑)最短的策略。 可选方案一是电梯先向上运行响应经过各层的目标和向上呼叫,再向下运行响应所有向下呼叫以及途经各层的目标,最后再向上响应剩余的向上呼叫。二是恰好相反,
Sosoo 1.0网络爬虫程序 ---用户开发手册 编写人:王建华(rimen/jerry) 编写目的:基于sosoo定制web spider程序的编程人员。 目录 一:安装sosoo 2 二:功能定制 2 1.基本功能参数的设置。 2 2.配置机器人对url的检查 3 3:实现文件管理。 4 4.定制html文档下载规则。 4 5.设置对下载后http文档的过滤处理 5 6.启用机器人运行期监控。 5 7.启用对http协议分析的监控。 5 三:sosoo描述 6 四:应用开发指南 6 1.Roboter类,spider程序的主类。 6 2.TaskList接口,解决对处理任务的存储。 7 3.Http客户端实现。 7 4.实现网页存储或处理 7 5.实现运行期的监控 8 五.程序例子 9 六.参考依赖 10 一:安装sosoo sosoo提供的是一个sosoo-core.jar包,其中并没有提供可运行的程序入口。如果要使用可以通过src中的examples进行体验。开发者可以基于在这上开发出基于UI,j2ee等spider程序 把sosoo-core包加入到你应用的classpath中。 Sosoo 提供一个线程类的来代表一个机器人com.sosoo.robot.spider. Roboter。 通过一个测试类 public static void main(String[] args) throws Exception { Roboter robby = new Roboter(); robby.setStartURL(new URL("http://10.25.101.173:7001/pa18Web/framework/images/framevork_04.gif")); robby.setMaxDepth(0); //设置最大连接访问深度 robby.setSleepTime(0); robby.setWalkToOtherHosts(true); robby.run(); //启动 } 这样就启动了一个spider程序,sosoo将根据你对javaBean参数的设置进行对网络上html 的抓取. 停止机器人. robot.stopRobot(); 二:功能定制 Sosoo利用回调的方式实现了aop,用户可以通过回调的方式注入javaBean对象,以实现其外部功能 1.基本功能参数的设置。 基本功能指: roboter的原生类型参数(或String),例如:startURL,maxDepth等。 设置开始处理的url【startURL】:必须参数,roboter会根据这个地址开始在网络上进行查找。 robby.setStartURL(URL url); 设置从开始路径能找的最大深度【maxDepth】:程序会判断当前处理的链接深度是否超过最大链接深度,如果超过这个链接将忽略,当然你可以通过设置depthIsEffect来屏蔽这个功能。默认值为1。 robby.setMaxDepth(0); 设置处理文档的时间间隔【sleepTime】:当处理完一个url时,设置这个间隔时间处理下一个url。单位为s,默认值为60,推荐使用5s。 robby.setSleepTime(0); 设置http连接超时时间:在连接服务器时,可能由于网络或者本身服务的原因,可 能会出现超时的情况,通过设置超时时间来限制对某个url连接的最大时间,这样就可以提高处理的速度,但是如果这个值设置太小,可能很多连接都会连接不到,建议使用大于30的值,默认为60s。 robby.setUrlConnectTimeOut(30); 停止robby线程【stopIt】:你可以通过对robby对象进行操作来停止当前的线程。 robby.stopRobot(); 暂停robby线程【sleep】:可以对当前运行的robby线程进行暂停。 robby.setSleep(true); 2.配置机器人对url的检查 sosoo spider会根据用户的设置把收集到url列表中过滤掉不符合条件的url。 过滤的顺序:walkToOtherHosts-allowWholeHost-flexibleHostCheck- allowWholeDomain-用户提供url列表。 设置是否访问其他的主机【walkToOtherHosts】:如果你需要进行整个互联网的搜索,而不限于你开始提供的url中的主机,把这个参数设置为true。默认为false。 robby.setWalkToOtherHosts(true); 设置是否访问本主机【allowWholeHost】:如果你只想要对开始url代表的主机进行访问,你可以通过设置这个参数进行过滤url。 robby.setAllowWholeHost(true); 设置非www开始的主机【flexibleHostCheck】:当你提供的开始url,不是以www开头,你可以通过设置flexibleHostCheck参数来达到访问本主机的目的。 robby.setFlexibleHostCheck(true); 设置是否访问本域【allowWholeDomain】:如果你只想要对开始url代表的域进行访问,你可以通过设置下面这个参数进行过滤url。 robby.setAllowWholeDomain(true); 设置要访问的url列表【allowedURLs】:这是一个Vector类型的变量,用户可以把这些url放在配置文件中,用户可以在运行时提供这个变量。 robby.setAllowedURLs(allowed); 定制url检查规则【URLCheck】:用户除了通过上面的规则进行url过滤,用户还可以通过实现urlCheck接口来进行url检测。系统已经提供了RegExpURLCheck实现。提供对properties文件的支持。 robby.setURLCheck(check); 设置是否要找网站跟目录下的/robot.txt文件【ignoreRobotsTxt】:用户可以通过设置这个值来忽略网站提供对robot的支持。默认为false robby.setIgnoreRobotsTxt(true); 设置url可以重复访问【visitMany】:系统提供了一个访问过的列表缓存,当spider程序发现这个url已经访问过,他将不进行这个url的处理。可以通过这个参数来定制可以重复访问的url列表,这是一个Vector类型。 robby.setVisitMany(visitMany); 设置spider客户端的【proxy】:spider可以通过代理连接internate,但是目前只支持匿名的代理服务器。 robby.setProxy("10.16.111.5:80"); 3:实现文件管理。 Spider程序下载url对应的html文档的时候,系统提供一个回调接口HttpDocManager。你可以通过的持接口的实现,把spider获得html数据进行存储,例如你可以把这些文件以文本流存入数据库,存入文件系统等。系统提供了HttpDocToFile实现,把下载的文件存入文件系统。你可以在启动spider程序的时候通过robby.setDocManager(dm);进行注入管理对象。 4.定制html文档下载规则。 当你对各种html文件的格式处理有要求的时候,例如你觉得下载exe,rar文件比较 慢的时候,你可以通过自己的需求定制下载规则。通过实现HttpDownloadCheck 接口可以设定下载的规则。 DownloadRuleSet rules=new DownloadRuleSet("downrules.properties"); robby.setDownloadRuleSet(rules); 系统已经提供了DownloadRuleSet实现,这个是想通过classpath properties来定义下载规则. 文件的内容: # the file must contain two field,allow[deny] and MIME Type/sub type # allow stand for if the doc match the conditions,will down the file # deny stand for if the doc match the conditions,will not down the file # < size ,express the doc content byte size is smaller than the value # > size ,express the doc contact byte size is larger than the value # can't hold out the >= or <= # the scope of size is optional. allow image/gif <100000 >10000000 deny image/gif <100000 >10000000 当然你可以自定义自己的实现,只要实现HttpDownloadCheck的boolean downloadAllowed(Vector httpHeaders) ;方法。 注意:如果这个文档没有下载,这个文档中的连接将不能进行处理,所以一般不建 议过滤掉text/html. 5.设置对下载后http文档的过滤处理 下载文档后,用户可以对这个doc对象进行一系列的处理。Spider提供了一个 FilterChain类。用户可以把自己过滤器加入FilterChain中。 你可以实现DocumentFilter接口定制自己的功能,系统实现提供了一个LinkLocalizer实现,用于替换相对连接。 FilterChain filters=new FilterChain(); DocumentFilter filter=new LinkLocalizer(); filters.add(filter); robby.setFilters(filters); 6.启用机器人运行期监控。 当启动spider程序后,程序利用回调接口提供给用户运行期的状态。例如你要要显示机器人对应的处理过的任务,处理中的任务,处理是的状态。通过实现RobotCallback接口来实现,当然你也可以直接取roboter对象的属性来监控。 系统提供RobotMonitor实现,用户打印在cosole上运行期的状态。 RobotCallback m Monitor(); robby.setWebRobotCallback(monitor); 7.启用对http协议分析的监控。 Spdier循环处理缓存中未处理的url,对于每个url的处理,系统提供一些监控方 法。当然你只要实现HttpToolCallback接口。系统提供了SystemOutHttpToolCallback实现。 HttpToolCallback toolM SystemOutHttpToolCallback(); robby.setHttpToolCallback(toolMonitor); 三:sosoo描述 Sosoo是参考jobo提供的核心算法。利用对访问的历史记录存储来替换spider的递归算 法。在处理的效率上有不错的体验,但是它也是牺牲存储为代价的。在程序启动是,系 统将建立两个Vector数组对访问url进行记录。因此sosoo并不使用于大数据量信息抓取,但是对于行业网站,中小企业绝对足够。 目前sosoo提供的处理功能: 支持跨域跨主机的访问 支持多种文件格式的下载 支持对html中连接的递归处理 支持http1.1协议但不支持1.0 支持匿名代理(http),但不知道需要验证代理。 待扩展的功能: 提供全功能http协议处理 提供javasript的支持 提供表单from的处理支持 提供对ftp协议的支持 提供全方位的代理(http,sock等)支持。 完善系统监控功能 加强对html文档的信息处理能力 提供各种文件类型的处理工具 提供对rss的支持 四:应用开发指南 sosoo提供很强的编程扩展,很容易把他集成到你的j2ee项目中。在中小型搜索引擎中, 特别对某一些特定的行业网站的数据进行分析时,Sosoo提供方便和安全的解决方案。 通过上述对功能的定制,我们可以看到在应用中我们对sosoo的编程接口并不多,而且目前系统都是基于set的方式注入aop注入对象,这样很容易和spring等基于set方式的依赖注入(IOC)框架集成。 1.Roboter类,spider程序的主类。 当你需要把sosoo应用到你的应用中时,roboter提供一个基于线程的工具类。它体可在程序中启动,暂停,退出一个spdier程序。这个类有sosoo提供,并不支持扩展,它标识spider的主体。它是整个spider程序所有功能的入口,包括回调功能,都是通过set方式注入到roboter中。 com.sosoo.robot.spider.Roboter 例如你要启动一个spider线程: Roboter robby = new Roboter(); robby.setStartURL(new URL("http://10.25.101.173:7001/pa18Web/framework/images/framevork_04.gif")); robby.setMaxDepth(0); //设置最大连接访问深度 robby.setSleepTime(0); robby.setWalkToOtherHosts(true); robby.run(); //启动 2.TaskList接口,解决对处理任务的存储。 对于sosoo而言,每个url对于一个任务。系统已经提供其默认的实现,你可以根据自己的需求实现这个接口。然后在启动spdier的时候用register方法进行注册。 robby .registerVisitedList(new HashedMemoryTaskList(false)); robby .registerToDoList(new HashedMemoryTaskList()); com.sosoo.robot.spider.TaskList 主要解决是对com.sosoo.robot.spider.RobotTask对象的存储。和常用的操作方 法,例如删除, 添加,查找等。具体参见@JAVADOC 3.Http客户端实现。 目前对sosoo1.0客户端而言,主要的用途就是提供模拟浏览器进行对http文档的获取。同时把他转换为HttpDoc对象。同时对http请求资源的管理,例如cookie管理。 Sosoo主要是通过com.sosoo.robot.http.HttpTool工具类来提供此工能。你也可以自己定制更优化的处理方案替换,同样通过register方法进行注册。由于重载这个工具需要对http协议有深刻的连接,一般不建议替换系统的实现。 Robby.RegisterHttpParser(new HttpTool); 4.实现网页存储或处理 当spider程序下载完以后,spider会用docManager管理其和filter来处理html文档和其内容。 HttpDocManager接口主要用来对HttpDoc对象的管理,例如把它存储在文件系统,或存入数据库等。系统提供了实现HttpDocToFile用来把HttpDoc对象存放在在文件系统中。 FilterChain主要用来进行httpDoc内容的一系列过滤功能。例如你主要取其中的某些信息。或者替换其中某些内容。它是实现了一个数组存储,你可以根据自己的需求加入多个实现DocumentFilter接口的对象,系统提供了一个实现LinkLocalizer,用来替换其中的相对连接。 系统先进行filter处理,然后在进行HttpDocManager 具体编程参考@javadoc 5.实现运行期的监控 Sosoo提供了两个监控的接口。用户可以实现这写接口的某些或全部方法,达到载 运行期内某些状态的监控。 Spider监控:com.sosoo.robot.spider.RobotCallback 主要提供文档的处理,spider的睡眠,spider当前任务的监控。 void webRobotRetrievedDoc(String url, int size); //实现对获取url对应的HttpDoc对象的监控 void webRobotUpdateQueueStatus(int length); //实现当前处理任务的监控 void webRobotDone(); //处理完成 void webRobotSleeping(boolean sleeping); //spider暂停 http分析监控:com.sosoo.robot.http.HttpToolCallback /** * After initiating a download, this method will be called to * inform about the URL that will be retrieved * @param URL url that will be retrieved now */ void setHttpToolDocUrl(String url); /** * After HttpTool got a Content-Length header * this method will be called to inform about the size of * the document to retrieve * @param size document size in */ void setHttpToolDocSize(int size); /** * after a block of bytes was read (default after every 1024 bytes, * this method will be called * @param size the number of bytes that where retrieved */ void setHttpToolDocCurrentSize(int size); /** * informs about the current status of the HttpTool * @param status an integer describing the current status * constants defined in HttpTool * @see HttpTool */ void setHttpToolStatus(int status); 系统提供了SystemOutHttpToolCallback默认实现。 五.程序例子 package com.sosoo.robot.examples; /********************************************* Copyright (c) 2005 by rimen sosoo *********************************************/ import java.net.URL; import com.sosoo.robot.http.DownloadRuleSet; import com.sosoo.robot.http.HttpDocManager; import com.sosoo.robot.http.HttpDocToBean; import com.sosoo.robot.http.HttpToolCallback; import com.sosoo.robot.http.SystemOutHttpToolCallback; import com.sosoo.robot.spider.RobotCallback; import com.sosoo.robot.spider.RobotMonitor; import com.sosoo.robot.spider.Roboter; import com.sosoo.robot.spider.docfilter.DocumentFilter; import com.sosoo.robot.spider.docfilter.FilterChain; import com.sosoo.robot.spider.docfilter.LinkLocalizer; /** * This example program downloads a web page. It does not * store the documents but only logs the visited URLs. * * @author jerry[wangjianhua] sosoo * @version $Revision: 1.1 $ */ public class SpiderMain { public static void main(String[] args) throws Exception { System.out.println("URLs will be logged to urls.txt\n\n"); Roboter robby =new Roboter(); System.out.println(robby); robby.setStartURL(new URL("http://www.sina.com.cn/")); robby.setMaxDepth(0); robby.setDepthIsEffect(true); robby.setSleepTime(0); robby.setIgnoreRobotsTxt(true); robby.setWalkToOtherHosts(true); FilterChain filters=new FilterChain(); DocumentFilter filter=new LinkLocalizer(); filters.add(filter); //html流过滤器 DownloadRuleSet rules=new DownloadRuleSet("downrules.properties"); HttpDocManager dm = new HttpDocToBean(); //进行文档管理,可以存放在数据库也可以存放在本地。 RobotCallback m RobotMonitor(); HttpToolCallback toolM SystemOutHttpToolCallback(); robby.setDocManager(dm); robby.setDownloadRuleSet(rules); robby.setFilters(filters); robby.setWebRobotCallback(monitor); robby.setHttpToolCallback(toolMonitor); robby.run(); //启动 } } 六.参考依赖 Jobo spider实现 Tidy html解析器 Log4j日志记录器 Apach 提供的正值表达式操作器 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Ackarlix/archive/2008/10/30/3182396.aspx
盈佳期货交易终端是基于综合交易平台接口(CTP-API)开发的标准期货交易终端。综合交易平台是由上海信息技术有限公司推出的新一代期货柜台交易系统,该平台对外公开、免费发布CTP-API供第三方软件商及程序化交易投资者接入期货柜台交易系统进行期货交易。 盈佳期货交易终端是综合交易平台众多标准终端之一,该终端不仅给用户提供简单快捷的人工交易界面,同时还提供了高效的程序化交易开发及运行框架,其主要特点如下: 1. 用户可以订阅综合交易平台发布的期货市场行情,并设定自定义合约组以方便用户查看特定合约的行情。 2. 资金、持仓、报单及成交信息实时刷新,用户关注的信息能及时展现。 3. 快速开仓、平仓及快捷反手,并且可以同时进行多个合约的开仓和平仓。 4. 对CTP-API进行了期货业务层面的封装,用户可以基于盈佳的接口编写程序化交易策略,而不用关注CTP-API的底层细节。 5. 提供程序化交易运行框架,用户可以自由启动、暂停及停止程序化交易策略。 6. 标准化的参数配置文件为程序化交易策略的参数化提供了极其便利的条件。 7. “盈佳行情收集器”为行情数据的收集和存储提供了便利的手段。 8. “盈佳交易策略模拟器”使用户可以通过回放历史行情数据,大大方便了用户的交易策略测试。 9. 盈佳期货交易终端还提供可供非c++语言调用的COM接口,熟悉VB、delphi甚至excel编程的用户也可以基于该COM接口实现期货交易策略的开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值