- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
多线程同步之 WaitableTimer (等待定时器对象).pdf
多线程同步之 WaitableTimer(等待定时器对象)
function CreateWaitableTimer(
lpTimerAttributes:PSecurityAttributes; {安全}
bManualReset:BOOL; {True: 可调度多个线程;False: 只调度一个线程}
lpTimerName:PWideChar {名称}
): THandle; stdcall; {返回句柄}
function SetWaitableTimer(
hTimer:THandle; {句柄}
varlpDueTime: TLargeInteger; {起始时间}
lPeriod: Longint; {间隔时间}
pfnCompletionRoutine:TFNTimerAPCRoutine;{回调函数的指针}
lpArgToCompletionRoutine: Pointer; {给回调函数的参数}
fResume:BOOL {是否唤醒系统}
): BOOL; stdcall; {}
WaitableTimer 对象较复杂, 其基本的理念是让等候的线程在指定的时间运行.
像其他同类对象一样, 先要建立(CreateWaitableTimer), 建立函数的第二个参数决定是调度
一个线程还是所有等候的线程; 这一点和信号对象(Semaphore) 有些类似, 不过 Semaphore
可以指定可驱动线程的具体数目.
和其他同类对象不同的是: 在 CreateWaitableTimer 以后,WaitableTimer 对象并没有马上开
始工作;
再调用 SetWaitableTimer 函数后才能让它发挥作用. 这又有点像 Event 对象.
SetWaitableTimer 函数比较麻烦, 得慢慢来, 譬如这样使用:
var
hWaitableTimer:THandle; {WaitableTimer 对象的句柄变量应该是全局的}
procedureTForm1.Button1Click(Sender:TObject);
var
DueTime: Int64;
begin
{建立 WaitableTimer 对象并返回句柄}
hWaitableTimer := CreateWaitableTimer(nil, True,nil);{中间的 True 表示可驱动多个线程}
DueTime := 0; {这将是 SetWaitableTimer 的第二个参数; 因为是 var 参数, 不能直接给
常量}
SetWaitableTimer(hWaitableTimer,{WaitableTimer 对象的句柄}
DueTime, {起始时间, 这里给的是 0}
0, {间隔时间, 这里给的也是 0}
nil, {暂不用回调函数}
nil, {当然也不需要给回调函数参数了}
False {此值若是 True, 即使系统在屏保或待机状态, 时间一到线程和
系统将都被唤醒!}
);
end;
{再说明:
起始时间(第二个参数)有三种赋值方法:
1、0 时是绝对时间, 是一个 TFileTime 格式的时间(具体赋值方法后面详解);
2、0 时是相对时间, 相对是相对于当前, 譬如 表示 5 秒钟后执行(单位是0.1
毫秒, 后面详述);
3、=0 时, 立即执行, 不再等待; 上面的举例和下面第一个例子我们先用 0.
间隔时间(第三个参数)有两种情况:
1、譬如 5000 表示每隔 5 秒钟执行一次, 其单位是毫秒; 本页第二个例子使用了 500(半
秒);
2、如果赋值为 0, 表示根据起始时间只执行一次, 不再重复执行.
回调函数及其参数(第四、五个参数), 这会牵扯出一个更复杂的话题(APC), 暂时不用它, 后
面再说.
最后一个参数上面已经说清楚了, 我也
您可能关注的文档
最近下载
- 2022年新疆农业大学招聘事业编制人员考试真题及答案.docx VIP
- 广告创意学(湖南大学)中国大学MOOC 慕课 章节测验 期末考试客观题答案.docx VIP
- 中小学《探索三角形的面积计算公式》教学设计教育教学资料整理.docx VIP
- 武汉大学308护理综合历年部分考研真题汇编.pdf VIP
- 2023年新疆农业大学招聘事业编制工作人员31人笔试题库及答案解析.docx VIP
- 高三化学一轮复习 铁及其化合物 学案.doc VIP
- 个体工商户登记(备案)申请书.doc VIP
- 2024年新疆农业大学招聘事业编制人员考试真题.docx VIP
- 工业领域视觉大模型落地实践.pdf VIP
- TNAHIEM 121-2024 创伤中心建设与设备配置规范.docx VIP
文档评论(0)