导航

心动吧DELPHI网络书

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

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

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

  提供多个控件下载:

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

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



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

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



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

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

....

WaitForSingleObject大致理解

明生KISS提示:这是一个等待函数,当未激活的状态下他是休眠的。。处理大量数值的时候他是一个属于优化类型的函数(至少我这么认为)..

有一样我想得不太明白的~这一个互斥的对像的意思是不是其余四条线程在等待。





详细的是:你的程序创建了五条线程。

当五个线程都调用了MyThreadFun的时候他们会执行到(if WaitForSingleObject(hMutex, INFINITE) = WAIT_OBJECT_0 then)这里的时候就会处于排队状态。。等待第一个运行完并释放了权限后才能让第二个线程进入~

...

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

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

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

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

原理分析:

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

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

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



使用过程:

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

DELPHI 线程池代码

 

unit uThreadPool;

{ aPool.AddRequest(TMyRequest.Create(RequestParam1, RequestParam2, ...)); }

interface
uses
Windows,
Classes;

// 是否记录日志
// {$DEFINE NOLOGS}

type
TCriticalSection = class(TObject)
...
分页:[«]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