2
|
jpfollenius Rob Kennedy · 技术社区 · 16 年前 |
![]() |
1
7
t监视器仅阻止 不同的 获取锁的线程。发生的是这样的:通过处理来自锁内的消息,您将返回到同一线程中的同一个函数中,这将导致对锁的递归获取。然后,您的代码将创建一个新的工作线程,并开始整个循环。您可以禁用该按钮,以便在工作线程完成之前不能再次单击它。确保禁用按钮 之前 您开始处理消息并使用另一个try..finally块来确保它被重新启用。根据其余代码的排列方式,您甚至可能不需要锁。 |
![]() |
2
3
一些评论:
我已经在stackoverflow上发布过几次这个链接,但是请考虑遵循 this list posting 在进行多线程编程时要记住一些事情。它有一些很好的建议,特别是关于第五点。 编辑: 很难说清楚,但您的代码应该是这样的:
NetworkerThread释放了自己,但作为最后一个操作,它向表单发送消息(这就是为什么它将窗口句柄作为参数的原因)。在该消息的处理程序中,您将fWorkerThread设置为nil,以便在下一个空闲循环中重新启用该操作。使用触觉意味着您不需要关心创建线程的UI元素是什么——它们都将在创建线程时被禁用,并在线程完成时被重新启用。不需要锁定,并且在线程处于活动状态时无法创建新线程。 |
![]() |
Some1Else · 函数在Delphi中重新创建TForm 2 年前 |
![]() |
Agmcz · Delphi安卓库。so未安装(AAB) 3 年前 |
![]() |
nader · 如何使用delphi在web上提交表单 6 年前 |
![]() |
kwadratens · Delphi中的卡方分布函数代码 6 年前 |
|
user9672569 · 如何在完整的位图图像中绘制阴影效果? 6 年前 |
![]() |
mmmm · MSBuild(用于Delphi)Make-like功能 6 年前 |