导航

心动吧DELPHI网络书

自发研究:须要多维思想而且要想不可能为可能的人才能做到

[置顶] {下载}本站提供delphi下载

  下载的时候最好不要用迅雷,要不然很容易断线.

  提供多个控件下载:

delphi判断线程是否正在运行

以下资料来自大富翁论坛。
判断线程是否释放
返回值:0-已释放;1-正在运行;2-已终止但未释放;3-未建立或不存在

function TFrmMain.CheckThreadFreed(aThread: TThread): Byte;
var
 i: DWord;
 IsQuit: Boolean;
begin
 if Assigned(aThread) then

.....

多线程: 不使用同步工具, 手动协调线程依次执行

在前面例子的基础上, 探讨新问题.



假如我们想让几个线程(例子中是 3 个)依次执行, 我们可以使用临界区、信号、互斥等手段;

但下面第一个例子什么同步工具都没用, 也达到了目的; 方法是: 让前一个线程在结束前顺便启动下一个线程.



第二个例子使用了互斥对象配合 WaitForSingleObject 函数, 也达到相似的目的.

效果图(两个例子的效果图差不多, 但第二个例子的执行顺序不好保证):

....

delphi 关闭线程函数

function FindProcessId(ExeFileName: string):THandle;//查找线程

var

  ContinueLoop:BOOL;

  FSnapshotHandle:THandle;

  FProcessEntry32:TProcessEntry32;

begin

  result:=0;

  FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

  FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);

  ContinueLoop:=Process32First

....

多线程同步之 WaitableTimer (等待定时器对象)-多类型理解

喝酒醉了一天, 重装系统一天, 两天没上博客了; 继续学习...



想过没有? WaitableTimer 是在 "定时等待", 前面例子中的 WaitForSingleObject 等待函数 "也在等待", 这就 "双重等待" 了, 这不好, 太浪费资源.



其实作为同步工具, 前面的几种方法(事件、信号、临界区)基本够用了; WaitableTimer 的作用并不是为了重复前面的功能, 它的主要功用类似 TTimer 类; 譬如每隔多长时间执行一段代码、或在指定的时间去执行一段代码.



既然有了方便的 TTimer, 何必再使用 WaitableTimer 呢?

因为 WaitableTimer 比 TTimer 精确的多, 它的间隔时间可以精确到毫秒、它的指定时间甚至是精确到 0.1 毫秒;

而 TTimer 驱动的 WM_TIMER 消息, 是消息队列中优先级最低的, 也就是再同一时刻 WM_TIMER 消息总是被最后处理.

还有重要的一点 WaitableTimer 可以跨线程、跨进程使用.



继续探讨一个重要的点: 很多时候为了让线程不冲突, 线程也在等待, 既然有等待, 那 WaitableTimer 非常精确的定时又有什么价值呢? 对这个问题的思考, 可.........

13多线程同步之 Event (事件对象)

据说 Event(事件对象) 是多线程最原始的同步手段, 我觉得它是最灵活的一个.

Event 对象(的句柄表)中主要有两个布尔变量, 从它的建立函数中可以看得清楚:
 
function CreateEvent(
lpEventAttributes: PSecurityAttributes; {安全设置}
...

12.多线程同步之 Semaphore (信号对象)

之前已经有了两种多线程的同步方法:

CriticalSection(临界区) 和 Mutex(互斥), 这两种同步方法差不多, 只是作用域不同;

CriticalSection(临界区) 类似于只有一个蹲位的公共厕所, 只能一个个地进;

Mutex(互斥) 对象类似于接力赛中的接力棒, 某一时刻只能一个人持有, 谁拿着谁跑.



什么是 Semaphore(信号或叫信号量)呢?

譬如到银行办业务、或者到车站买票, 原来只有一个服务员, 不管有多少人排队等候, 业务只能一个个地来.

...

11多线程同步之 Mutex (互斥对象)

原理分析:

互斥对象是系统内核对象, 各线程都可以拥有它, 谁拥有谁就能执行;

执行完毕, 用 ReleaseMutex 函数释放拥有权, 以让其他等待的线程使用.

其他线程可用 WaitForSingleObject 函数排队等候(等候也可以理解为排队申请).



使用过程:

var hMutex: THandle; {应该先声明一个全局的互斥句柄}
...

多线程的检查,与关闭线程

在delphi处理线程的时候常常会造成某些未知的bug,搞得程序无法继续往下走,所以此时我们必需要有应对手策,否则的话,很容易造成我们的工作无法完成

分页:[«]1[»]

日历

<< 2013-5 >>

Sun

Mon

Tue

Wed

Thu

Fri

Sat

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

站内搜索

Copyright ⊙ 2004-2009 心动吧 UrL:ABCXD.CoM All RiGhts Reserved