随笔分类 -  Delphi-Thread

摘要:线程池的概念 单位时间内必须处理数目巨大的连接请求,但处理时间却相对较短。 传统多线程方案中,一旦接受到请求之后,即创建一个新的线程,由该线程执行任务。任务执行完毕后,线程退出。这就是即时创建,即时销毁的策略。尽管与创建进程相比,创建线程的时间已经大大的缩短,但是如果提交给线程的任务执行时间很短,而 阅读全文
posted @ 2016-03-02 23:39 findumars 阅读(315) 评论(0) 推荐(0) 编辑
摘要:unit Unit2;interfaceusesSystem.Classes, Windows, Messages;constWM_DO = WM_USER + 1;typeTDemoThread = class(TThread)private{ Private declarations }prot 阅读全文
posted @ 2016-03-02 23:37 findumars 阅读(435) 评论(0) 推荐(0) 编辑
摘要:关于延迟时间的一点智慧 一般的做法: Sleep(2000); // 延迟2秒此种做法有俩个弊端:(1)如果实际需要的延迟时间不需要2秒,则明显有延迟时间浪费;(2)如果实际需要的延迟时间超过2秒,则很可能发生不可预料的错误。 改进的做法: repeat Sleep(10); until FileE 阅读全文
posted @ 2016-03-02 23:27 findumars 阅读(244) 评论(0) 推荐(0) 编辑
摘要:对于守护中间件是非常有用的。中间件不可能绝对的稳定而不出问题,中间件有可能因比较严重的错误导致当机或者进程被人为地错误地关闭了中间件。 有了这个自动守护进程的存在,这一切的问题都可以迎刃而解。 program Monitor; // {$APPTYPE CONSOLE} usesWinapi.Win 阅读全文
posted @ 2016-03-02 23:22 findumars 阅读(447) 评论(0) 推荐(0) 编辑
摘要:DELPHI XE7 的新功能列表里面增加了并行库System.Threading, System.SyncObjs。 为什么要增加新的并行库? 还是为了跨平台。以前要并行编程只能从TThread类继承进行多线程处理,大家知道TThread类是从WINDOWS的线程API封装起来的,它封装的是WIN 阅读全文
posted @ 2016-03-02 23:19 findumars 阅读(439) 评论(0) 推荐(0) 编辑
摘要:最近在做的一个软件,其中有一部分功能需要调用其它的软件来完成,而那个软件只有可执行文件,根本没有源代码,幸好,我要做的事不难,只需要在我的程序启动后,将那个软件打开,在需要的时候,对其中的一个文本矿设置一些文字,再点击一个按钮就可以了。说到这里,相信你也有了对该功能的一些初步设想了,没错,其基本思路 阅读全文
posted @ 2016-03-02 22:16 findumars 阅读(7742) 评论(1) 推荐(4) 编辑
摘要:unit uThreadPool;{ aPool.AddRequest(TMyRequest.Create(RequestParam1, RequestParam2, ...)); }interfaceuses Windows, Classes;// 是否记录日志// {$DEFINE NOLOGS 阅读全文
posted @ 2016-02-25 19:09 findumars 阅读(1041) 评论(0) 推荐(0) 编辑
摘要:答案是:在线程中出现没处理的异常时,线程会自动终止。以前刚看到别人的代码时候,十分惊讶,try catch几乎成了最主要的语句了,还以为是因为代码风格,或者更严谨一些的原因。到今天才明白,原来还不是这个原因,是因为线程出现异常,满盘出错(线程的一个执行步骤分为整整28步,有些步骤甚至还包含一些小的步... 阅读全文
posted @ 2015-12-02 06:43 findumars 阅读(927) 评论(0) 推荐(0) 编辑
摘要:解决上一节中延时函数占CPU使用率(达50%)的第二种方法是利用消息机制,通过API函数MsgWaitForMultipleObjects等待消息或超时的到来,从而避免使用循环检测使CPU占用率过高。完整的改进版Delay函数代码如下:[delphi]view plaincopyprint?pro... 阅读全文
posted @ 2015-11-30 21:59 findumars 阅读(3320) 评论(0) 推荐(0) 编辑
摘要:TheSetThreadAffinityMaskfunction sets a processor affinity mask for the specified thread.[delphi]view plaincopyprint?DWORD_PTRSetThreadAffinityMask(HA... 阅读全文
posted @ 2015-11-26 22:29 findumars 阅读(2761) 评论(0) 推荐(0) 编辑
摘要:看本文时,可以同时参考:Delphi中线程类 TThread实现多线程编程(事件、临界区、Synchronize、WaitFor……)先说一下RTL和VCL RTL(Run-Time library),运行时库,包括System、SysUtils、Math三个单元,提供的函数与语言、编译器、操作系... 阅读全文
posted @ 2015-11-17 18:48 findumars 阅读(3888) 评论(0) 推荐(1) 编辑
摘要:上面所给出的第一种解决方案: 线程(Execute)在执行定时循环;然后先让 DestroyAThread设置 Terminated属性,通知线程去结束执行、释放资源;然后在线程结束执行、释放资源之后再去通知DestroyAThread,再由DestroyAThread来显式调用线程的 Free方... 阅读全文
posted @ 2015-11-17 18:42 findumars 阅读(2188) 评论(0) 推荐(0) 编辑
摘要:在线程对象被释放之前,首先要检查线程是否还在执行中,如果线程还在执行中(线程ID不为0,并且线程结束标志未设置),则调用Terminate 过程结束线程。Terminate 过程只是简单地设置线程类的 Terminated标志,如下面的代码:1234procedureTThread.Terminat... 阅读全文
posted @ 2015-11-17 18:40 findumars 阅读(1707) 评论(0) 推荐(0) 编辑
摘要:当有多个线程的时候,经常需要去同步这些线程以访问同一个数据或资源。 例如,假设有一个程序,其中一个线程用于把文件读到内存,而另一个线程用于统计文件的字符数。当然,在整个文件调入内存之前,统计它的计数是没有意义的。但是,由于每个操作都有自己的线程,操作系统会把两个线程当做是互不相干的任务分别执行,这... 阅读全文
posted @ 2015-11-17 18:38 findumars 阅读(681) 评论(0) 推荐(0) 编辑
摘要:尽管多线程能够解决许多问题,但是同时它又给我们带来了很多的问题。其中主要的问题就是:对全局变量或句柄这样的全局资源如何访问?另外,当必须确保一个线程中的某些事件要在另一个线程中的其他时间之前(或之后)发生时,该怎么办?这里将讲解通过使用由 Delphi提供的线程局部存储和 A P I为线程提供同步的... 阅读全文
posted @ 2015-11-17 18:33 findumars 阅读(467) 评论(0) 推荐(0) 编辑
摘要:(1) 读写最好还是不要多线程,硬盘读写的速度有限,单线程时已经满负荷了,多线程又会增加线程之间的切换,会增加时间。 如果想增加读写速度,应该增加硬盘,做raid(2)首先是硬盘的写入是串行的,CPU的计算才是并行的,如果你偏重计算那么多线程能提高,要不怎么叫做并行计算呢; 如果侧重存储,除非数据量... 阅读全文
posted @ 2015-09-29 21:55 findumars 阅读(4491) 评论(0) 推荐(0) 编辑
摘要:{== D6DLLSynchronizer =================================================}{: This unit handles the D6 synchronize problem in DLLs@author Dr. Peter Below... 阅读全文
posted @ 2015-08-21 18:05 findumars 阅读(510) 评论(0) 推荐(0) 编辑
摘要:Delphi编程获取系统当前进程、窗口句柄、文件属性以及程序运行状态.uses TLHelp32,PsAPI;(1)显示进程列表:procedure TForm1.Button2Click(Sender: TObject);var lppe: TProcessEntry32;found : bool... 阅读全文
posted @ 2015-08-21 17:19 findumars 阅读(3533) 评论(0) 推荐(0) 编辑
摘要:本文试着从分析Synchronize同步执行的实现机制入手,来解决DLL/ActiveForm中线程同步的问题。 线程中进行同步时调用的Synchronize函数,仅仅是把调用调用线程、调用方法地址、异常对象封装在一个同步结构中,然后调用处理同步结构的类方法Synchronize。 proced... 阅读全文
posted @ 2015-08-18 17:40 findumars 阅读(360) 评论(0) 推荐(0) 编辑
摘要:有一个项目,一旦点下按钮后,用死循环不停的读数据,读出后立刻用可视化的方法显示。如果不采用多线程的方法,程序运行都正确,但无法关闭窗口,不清楚是窗口无法通过关闭按钮来接受Windows消息,还是接受了消息却没有机会处理?(写个了程序用Spy++观察一下,似乎是没有接受到消息。Delphi IDE可以 阅读全文
posted @ 2014-04-10 00:15 findumars 阅读(1910) 评论(0) 推荐(0) 编辑