我在OnTimer事件处理程序(TTimer)中得到一个异常,它在执行时递增父窗体中的整数变量.定时器需要能够访问用作id的递增整数.
我的第一个问题是:如何在Delphi 2007中告诉哪个代码在哪个线程中运行?有没有办法在调试模式下检查这个,所以我可以确定?
其次,如果我需要从另一个线程访问和修改父表单中的变量,那么最好的方法是什么?似乎有时Delphi允许我"错误地"访问这些变量而不给出异常,有时它确实给出了异常.
只是为了确定:一方面,你在谈论一个计时器事件,另一方面是关于多线程.这是两种完全不同的并行运行代码的方式.
计时器将始终在主线程中运行.它应该是安全的,可以访问在主线程中创建和使用的所有内容.实际上,只有当没有其他主线程代码在运行时才会发生计时器事件,因为它需要应用程序的消息处理程序来处理计时器消息.因此,它不在任何事件处理代码之外,或者当您的某个事件处理程序调用Application.ProcessMessages时.
线程与此截然不同.在这种情况下,不同线程中的代码彼此独立地运行.如果在多处理器机器(或多核)上运行,甚至可能它们真正并行运行.你可能有这么多问题,特别是Delphi VCL(包括Delphi XE)不是线程保存,所以只能从主线程调用任何VCL类(有几个例外)这条规则).
因此,在预期任何有用的答案之前,请首先澄清您是在谈论计时器还是真正的多线程.