DELPHI线程例子-FC】的更多相关文章

{优秀的数据库应用应当充分考虑数据库访问的速度问题.通常可以通过优化数据库.优化 查询语句.分页查询等途径收到明显的效果.即使是这样,也不可避免地会在查询时闪现一个带有 SQL符号的沙漏,即鼠标变成了查询等待.最可怜的是用户,他(她)在此时只能无奈地等待.遇到急性子的,干脆在此时尝试 Windows中的其它应用程序,结果致使你的数据库应用显示一大片白色的窗口.真是无奈! 本文将以简单的例子告诉你如何实现线程查询.还等什么,赶快打开Delphi对照着下面的完整源代码试试吧. 在查询时能够做别的事情…
第六节: TList 与泛型   TList 是一个重要的容器,用途广泛,配合泛型,更是如虎添翼. 我们先来改进一下带泛型的 TList 基类,以便以后使用. 本例源码下载(delphi XE8版本): FooList.Zip   unit uFooList; interface uses   Generics.Collections; type     TFooList <T>= class(TList<T>)   private     procedure FreeAllIte…
多线程的基本概念和Delphi线程对象Tthread介绍 作者:xiaoru    WIN 98/NT/2000/XP是个多任务操作系统,也就是:一个进程可以划分为多个线程,每个线程轮流占用CPU运行时间和资源,或者说,把CPU 时间划成片,每个片分给不同的线程,这样,每个线程轮流的“挂起”和“唤醒”,由于时间片很小,给人的感觉是同时运行的. 多线程带来如下好处: 1)避免瓶颈: 2)并行操作: 3)提高效率:多线程的两个概念: 1) 进程:也称任务,程序载入内存,并分配资源,称为“一个进程”.…
http://delphi.cjcsoft.net//viewthread.php?tid=635 在delphi线程中实现消息循环 在delphi线程中实现消息循环 Delphi的TThread类使用很方便,但是有时候我们需要在线程类中使用消息循环,delphi没有提供.   花了两天的事件研究了一下win32的消息系统,写了一个线程内消息循环的测试.   但是没有具体应用过,贴出来给有这方面需求的DFW参考一下.希望大家和我讨论.   {---------------------------…
在delphi线程中实现消息循环 在delphi线程中实现消息循环 Delphi的TThread类使用很方便,但是有时候我们需要在线程类中使用消息循环,delphi没有提供.   花了两天的事件研究了一下win32的消息系统,写了一个线程内消息循环的测试.   但是没有具体应用过,贴出来给有这方面需求的DFW参考一下.希望大家和我讨论.   {-----------------------------------------------------------------------------…
Delphi线程定时器 - -人生如歌- - 博客园http://www.cnblogs.com/zhengwei0113/p/4192010.html (* 自己编写的线程计时器,没有采用消息机制,很有效 Cobbler续写 不用 TTimer 的原因: 要说TTimer类的使用问题,先要说一下它响应用户定义的回调函数(OnTimer)的方法. TTimer拥有一个HWnd类型的成员变量FWindowHandle,用于捕捉系统消息. TTimer在Enable的情况下,每隔Interval时间…
第二节:在线程时空中操作界面(UI)   1.为什么要用 TThread ?   TThread 基于操作系统的线程函数封装,隐藏了诸多繁琐的细节. 适合于大部分情况多线程任务的实现.这个理由足够了吧? 什么?你要用 windows 的线程 api 来实现多线程? 我可以负责任地告诉你,如果你用 api 来实现多线程任务, 加之你天资聪明,对 delphi 的面向对象思想掌握得非常快, 那么最终也你也会写一个与 TThread 类似的东西来提高开发效率. 何必折腾呢?要相信 delphi 的工程…
第一节:初识多线程   1.为什么要学习多线程编程?   多线程(多个线程同时运行)编程,亦可称之为异步编程. 有了多线程,主界面才不会因为耗时代码而造成“假死“状态. 有了多线程,才能使多个任务同时执行,最大化利用CPU资源,提高效率. 在安卓编程中,要求必须是多线程,主界面中的代码只要耗时几秒钟,就会触发 ANR 错误. 多线程编程才是工作中的常态.多线程是必须掌握的!越早越好!   2.网络上 delphi 多线程 Demo 的误区   采用 API 来实现多线程.难度太高,尤其是用指针来…
http://download.csdn.net/download/coolstar1204/2008061 微软手写识别模块sdk及delphi接口例子…
http://www.cnblogs.com/lackey/p/6297115.html 几个例子: http://www.cnblogs.com/lackey/p/5371544.html…
当线程对象的Execute()执行完毕,我们就认为此线程终止了.这时候,它会调用Delphi的一个标准例程EndThread(),这个例程再调用API函数ExitThread().由ExitThread()来清除线程所占用的栈. 当结束使用TThread对象时,应该确保已经把这个Delphi对象从内存中清除了.这才能确保所有内存占有都释放掉.尽管在进程终止时会自动清除所有的线程对象,但是及时清除已经不再使用的对象,可以使内存的使用效率提高.利用将FreeOnTerminate的属性设置为True…
参考http://blog.chinaunix.net/uid-10535208-id-2949323.html 一.概述 Delphi提供了好几种对象以方便进行多线程编程.多线程应用程序有以下几方面的功能: 1.避免性能瓶颈:单线程应用程序在进行比较慢的操作如磁盘读写的时候,CPU必须停下来等待,直到该操作执行完毕.而多线程应用程序在进行比较慢的操作如磁盘读写的时候,即系执行另一个单独的线程: 2.组织应用才程序的行为:通常,一个程序的行为可以组织成几个功能相互独立的平行的处理过程.将这些独立…
上次跟大家分享了线程的标准代码,其实在线程的使用中最重要的是线程的同步问题,如果你在使用线程后,发现你的界面经常被卡死,或者无法显示出来,显示混乱,你的使用的变量值老是不按预想的变化,结果往往出乎意料,那么你很有可能是忽略了线程同步的问题. 当有多个线程的时候,经常需要去同步这些线程以访问同一个数据或资源.例如,假设有一个程序,其中一个线程用于把文件读到内存,而另一个线程用于统计文件中的字符数.当然,在把整个文件调入内存之前,统计它的计数是没有意义的.但是,由于每个操作都有自己的 线程,操作系统…
新delphi的线程TThread有了CreateAnonymousThread方法,如果再为它加一个可传递的参数不就更好了吗?代码如下: TAnonymousThreadX<T> = class(TThread) private FProc: TProc<T>; AValue:T; protected procedure Execute; override; public constructor Create(const AProc: TProc<T>;ProcPar…
新delphi的线程TThread有了CreateAnonymousThread方法,如果再为它加一个可传递的参数不就更好了吗?代码如下: TAnonymousThreadX<T> = class(TThread) private FProc: TProc<T>; AValue:T; protected procedure Execute; override; public constructor Create(const AProc: TProc<T>;ProcPar…
总结一下Windows常用的几种线程同步技术. 1.Critical Sections(临界段),源代码中如果有不能由两个或两个以上线程同时执行的部分,可以用临界段来使这部分的代码执行串行化.它只能在一个独立的进程或一个独立的应用程序中使用.使用方法如下://在窗体创建中InitializeCriticalSection(Critical1)//在窗体销毁中DeleteCriticalSection(Critical1)//在线程中EnterCriticalSection(Critical1)……
delphi 自带的Timer控件,使用方便,但它的 OnTimer 事件是在主线程中引发的. 如果在事件中执行较耗时的代码,会引起主界面假死.故实现一个线程的Timer就有必要了. TThreadTimer 基于 TSimpleThread 继承而来. 本例源码下载 unit uThreadTimer; interface uses uSimpleThread; type TThreadTimer = class; // 提前申明 TThreadTimer 是一个类 TOnThreadTime…
1. TSimpleThread 2. TSimpleList 3. 以1,2构成 TSimplePool 用法 先定义: TDoSomeThingThread=class(TSimpleThread) ; 并给 TDoSomeThingThread reintroduce Create 不带参数的构造函数. 再定义  TDoSomeThingPool=class(TSimpleTool<TDoSomeThing>); 最后,只需在 TDoSomeThingPool 写线程调度的代码就行了,可…
第五节:多个线程同时执行相同的任务   1.锁   设,有一个房间 X ,X为全局变量,它有两个函数  X.Lock 与 X.UnLock; 有如下代码:   X.Lock;      访问资源 P; X.Unlock;   现在有A,B两个线程时空都要执行此段代码. 当线程A执行了 X.Lock 之后,在没有执行完  X.Unlock 之前,第二个线程B此时也来执行 X.Lock , 线程B就会阻塞在 X.Lock 这句代码上.我们可以认为,此时,线程A进入房间,其它线程不准再进入房间. 只能…
第四节:多线程类的改进   1.需要改进的地方   a) 让线程类结束时不自动释放,以便符合 delphi 的用法.即 FreeOnTerminate:=false; b) 改造 Create 的参数,让它适合访问 COM 组件.如:在线程时空中能够创建 TAdoConnection; c) 设计一个接口能将一个过程( procedure )塞到线程时空中去运行的功能,这样,不必每次重载 Execute 函数. d) 设计一个输出信息的接口   下一节,将讲解如何用多个线程同时执行相同的任务  …
Delphi 封装了一个很强大的线程类 TThread, 我们也自己动手制作一个简单的线程类 首先Type一个类 type TwwThread = class constructor Create; overload; destructor Destroy; override; private m_hThread: THandle;     //线程 m_ThreadID : TThreadID; public procedure Execute; end; function wwThreadP…
当有多个线程的时候,经常需要去同步这些线程以访问同一个数据或资源. 例如,假设有一个程序,其中一个线程用于把文件读到内存,而另一个线程用于统计文件的字符数.当然,在整个文件调入内存之前,统计它的计数是没有意义的.但是,由于每个操作都有自己的线程,操作系统会把两个线程当做是互不相干的任务分别执行,这样就可能在没有把整个文件装入内存时统计字数.为解决此问题,你必须使两个线程同步工作 存在一些线程同步地址的问题,Win 32 提供了许多线程同步的方式.这里将会讲到:临界区.互斥.信号量和事件 为了检验…
TThread在Classes单元里的声明如下 type TThread = class private FHandle: THandle; FThreadID: THandle; FTerminated: Boolean; FSuspended: Boolean; FFreeOnTerminate: Boolean; FFinished: Boolean; FReturnValue: Integer; FOnterminate: TNotifyEvent; FMethod: TThreadMe…
如果Resume不能唤起线程,请试试如下的函数,试试. GetExitCodeThread(ThreadHandle,ExitCode)来取得ExitCode,如果ExitCode=STILL_ACTIVE表示线程还存在,对于存在的线程,则可以使用ResumeThread(ThreadHandle)来唤醒线程,如果线程仍然处于运行状态,则会返回错误具体的自己去看相关的API的返回值. 本人在实际应用中还是没能够解决上面问题,只好委曲找到另一种解决方法. procedure TfrmDataExc…
unit Unit1; interface usesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls; typeTForm1 = class(TForm)Button1: TButton;Button2: TButton;Button3: TButton;Button4: TButton;procedure Button1Click(Sender: TObject…
当有多个线程的时候,经常需要去同步这些线程以访问同一个数据或资源. 例如,假设有一个程序,其中一个线程用于把文件读到内存,而另一个线程用于统计文件的字符数.当然,在整个文件调入内存之前,统计它的计数是没有意义的.但是,由于每个操作都有自己的线程,操作系统会把两个线程当做是互不相干的任务分别执行,这样就可能在没有把整个文件装入内存时统计字数.为解决此问题,你必须使两个线程同步工作 存在一些线程同步地址的问题,Win 32 提供了许多线程同步的方式.这里将会讲到:临界区.互斥.信号量和事件 为了检验…
unit uThreadPool; {   aPool.AddRequest(TMyRequest.Create(RequestParam1, RequestParam2, ...)); } interfaceuses  Windows,  Classes; // 是否记录日志// {$DEFINE NOLOGS} type  TCriticalSection = class(TObject)  protected    FSection: TRTLCriticalSection;  publi…
第七节:在多个线程时空中,把各自的代码塞到一个指定的线程时空运行     以 Ado 为例,常见的方法是拖一个 AdoConnection 在窗口上(或 DataModule 中), 再配合 AdoQuery ,DataSoure, DbGrid 等,就可以实现数据库的访问操作. 这种方式,可以理解为在主线程时空中访问数据库. 如果某一个查询或更新操作耗时较长,那么,界面将会假死.   1.在线程时空中访问数据库   其实,上文中提到的这个 AdoConnection 不单只能在主线程时空中访问…
http://bbs.csdn.net/topics/390744417 串口控件本身的线程不是这样理解的,你不用管它本身用不用线程,它的内部线程和你也没关系.前面说过了,你可以在自己的主线程里创建好Spcomm,并配置好各个参数,然后你的线程就可以用这个在主线程里创建的SPCOMM了.为了简单,一个线程单独用一个SPCOMM,这样就不用考虑各个线程间的冲突了.要发送的消息可以预先设置好一个列表传入通信子线程,通信子线程收到数据后给主线程发消息,可以这样发消息: var   aDataRec:T…
http://docwiki.embarcadero.com/Libraries/Seattle/en/System.Threading.TTask http://docwiki.embarcadero.com/Libraries/Seattle/en/System.Threading.TTaskStatus The Parallel Programming Library (PPL) provides a TTask class to run one task or multiple task…