2011年10月10日

使用substring提取串口输入缓冲区数据时报错

摘要: 通过串口接收数据帧,想当收到一帧数据后触发读串口事件,然后使用substring将数据帧进行解析。问题出现了,收到足够数据后触发读取事件的时候,单步执行可以顺利提取数据帧中的数据,但是当直接运行时就会在substring函数处报错,说截取的数据位数超过数据范围。多方查找,应该是没有能够读取完整的数据帧的缘故。想可以通过检测读取了完整的数据后再提取,或者就在触发读取数据操作后先睡上一会然后再去寄存器取数据。加了个sleep后果然可以正常运行,看来确实需要点反应时间。 阅读全文

posted @ 2011-10-10 22:58 aerkate 阅读(418) 评论(0) 推荐(0) 编辑

多线程编程(4):多线程与UI操作(转载自周公)

摘要: 为了让程序尽快响应用户操作,在开发Windows应用程序时经常会使用到线程。对于耗时的操作如果不使用线程将会是UI界面长时间处于停滞状态,这种情况是用户非常不愿意看到的,在这种情况下我们希望使用线程来解决这个问题。下面是一个使用多线程操作界面UI的代码:view plainusingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;usingSystem. 阅读全文

posted @ 2011-10-10 22:44 aerkate 阅读(175) 评论(0) 推荐(0) 编辑

多线程编程(3):线程池ThreadPool(转载自周公)

摘要: 在面向对象编程中,经常会面对创建对象和销毁对象的情况,如果不正确处理的话,在短时间内创建大量对象然后执行简单处理之后又要销毁这些刚刚建立的对象,这是一个非常消耗性能的低效行为,所以很多面向对象语言中在内部使用对象池来处理这种情况,以提高性能,比如在ADO.NET内部就允许使用数据库连接池来提高性能,在JDBC中没有提供数据库连接池,一些开发人员为了提高效率就自己编写数据库连接池来提高性能,当然据我所知在Java中有些框架提供了数据库连接的池化处理。在多线程编程时也会遇到上面的情况,如果创建了过多的线程将会增加操作系统资源的占用,并且还要处理资源要求和潜在的占用冲突,并且使用了多线程之后将使代码 阅读全文

posted @ 2011-10-10 22:43 aerkate 阅读(138) 评论(0) 推荐(0) 编辑

多线程编程(2):线程的同步(转自周公)

摘要: 在《多线程编程》系列第一篇讲述了如何启动线程,这篇讲述线程之间存在竞争时如何确保同步并且不发生死锁。线程不同步引出的问题下面做一个假设,假设有100张票,由两个线程来实现一个售票程序,每次线程运行时首先检查是否还有票未售出,如果有就按照票号从小到大的顺序售出票号最小的票,程序的代码如下:view plainusingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Threading;namespaceStartThread{publicclassThreadLock{privateThreadthreadO 阅读全文

posted @ 2011-10-10 22:42 aerkate 阅读(168) 评论(0) 推荐(0) 编辑

C#多线程编程(1):线程的启动(转自周公)

摘要: 在实例化Thread的实例,需要提供一个委托,在实例化这个委托时所用到的参数是线程将来启动时要运行的方法。在.net中提供了两种启动线程的方式,一种是不带参数的启动方式,另一种是带参数的启动的方式。不带参数的启动方式如果启动参数时无需其它额外的信息,可以使用ThreadStart来实例化Thread,如下面的代码:view plainusingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Threading;namespaceStartThread{classProgram{intinterval=200 阅读全文

posted @ 2011-10-10 22:40 aerkate 阅读(183) 评论(0) 推荐(0) 编辑

导航