Delphi线程冻结

时间:2010-02-04 03:24:32

标签: delphi multithreading freeze

我编写了一个有两个线程的服务应用程序。 第一个线程,显示带有标签的表单。 第二个线程,查询ADO。

第一个线程总是用Hourglass游标冻结,没有标签标题。

请帮忙。

2 个答案:

答案 0 :(得分:4)

如果您试图在主线程的线程中显示表单,那么您将遇到类似这样的奇怪事情。最值得注意的是,如果表单和标签是在非主线程中创建的,那么您没有消息循环来处理消息。如果表单是在主线程中创建的,但是你试图从非主线程中显示它,那么由于Windows如何处理消息和线程,它很可能是死锁。

创建窗口句柄时,它与创建窗口句柄的线程相关联。这意味着Windows将确保在该线程上处理发送到该句柄的任何消息。

我强烈建议您阅读窗口消息,消息队列和句柄如何在多线程环境中交互和运行。如果没有正确完成,你可以确定一些非常奇怪且可能不可预测的行为。

答案 1 :(得分:0)

我会把你的情况称为种族,死锁或其他类似的错误。正如艾伦所说,如果后台线程可以直接访问VCL控件,而不使用TThread.Synchronize(myMethod)来调用触及VCL前景的myMethod,那么单独这会导致你的麻烦。

发布更多信息,包括您的代码示例。