摘要: 在前面例子的基础上, 探讨新问题. 假如我们想让几个线程(例子中是 3 个)依次执行, 我们可以使用临界区、信号、互斥等手段; 但下面第一个例子什么同步工具都没用, 也达到了目的; 方法是: 让前一个线程在结束前顺便启动下一个线程. 第二个例子使用了互斥对象配合 WaitForSingleObject 函数, 也达到相似的目的. 效果图(两个例子的效果图差不多, 但第二个例子的执行顺序不好... 阅读全文
posted @ 2009-02-19 23:46 万一 阅读(9428) 评论(12) 推荐(0) 编辑
摘要: 前面的例子都是让若干线程做同样的事情, 下面这个例子中的三个线程将分别在三个画板上随机画不同颜色的椭圆. 接下来的很多事情我想要基于这个例子来做. 本例效果图: 代码文件: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, D... 阅读全文
posted @ 2009-02-19 21:17 万一 阅读(12689) 评论(18) 推荐(0) 编辑
摘要: //例子中的三个变量让 absolute 都给弄到一块了, 这有时会很方便; 但我总也想不到用, 还是不熟. procedure TForm1.FormCreate(Sender: TObject); var num: Int64; pt: TPoint absolute num; arr: array[0..1] of Integer absolute pt; begin p... 阅读全文
posted @ 2009-02-19 16:03 万一 阅读(7193) 评论(2) 推荐(1) 编辑
摘要: unit WTimer;interfaceuses Windows, SysUtils, SyncObjs;type TWaitableTimer = class(TSynchroObject) protected FHandle: THandle; FPeriod: LongInt; FDueTime: TDateTime; FLastError: Integer; FLongTime: ... 阅读全文
posted @ 2009-02-19 15:27 万一 阅读(4788) 评论(3) 推荐(0) 编辑
摘要: 根据 WaitableTimer 的主要功用, 现在再把它放在 "线程同步" 的话题中讨论有点不合适了, 就要结束它. //重新看看那个 APC 回调函数的格式: procedure TimerAPCProc( lpArgToCompletionRoutine: Pointer; dwTimerLowValue, dwTimerHighValue: DWORD ); stdcall;... 阅读全文
posted @ 2009-02-19 12:19 万一 阅读(6341) 评论(5) 推荐(0) 编辑