【发布时间】:2017-05-29 11:32:06
【问题描述】:
我想画点东西。因为 GUI 冻结我想在一个线程中绘制。但有时我想暂停绘图(几分钟)。
Delphi 的文档说 Suspend/resume 已过时,但没有说明哪些函数会替换它们。
不推荐使用暂停和恢复。 Sleep 和 SpinWait 显然是不合适的。我很惊讶地看到 Delphi 没有提供这样一个基本的属性/功能。
那么,如何暂停/恢复线程?
【问题讨论】:
-
您设置了一个标志,您的线程会定期检查该标志。然后根据标志的值绘制或不绘制。
-
使用事件和
WaitForSingleObject... -
@DavidHeffernan - 好的。当标志为 'DoNotDraw' 时,我用什么来暂停线程? THread.Sleep(100) 是个好主意??
-
不。睡觉几乎总是一个坏主意。你可以等待一个事件。这样做而不是简单的标志。因此,在您的绘图循环中等待事件发出信号。在主线程中,当你想暂停绘图时重置事件。当您想恢复绘图时再次设置它。
-
@whosrdaddy - 请注意 :) 在搜索 WaitForSingleObject 文档时,我发现了这个:marc.durdin.net/2012/08/…
标签: multithreading delphi bitmap delphi-xe7