X- 20045 X-
发布时间:2020-12-15 04:26:59 所属栏目:大数据 来源:网络整理
导读:当我们有一个threadvar声明,当这个变量将被初始化(对象被创建)?它是否发生在var的第一个赋值?例如: threadvar myThreadVar : string;......//inside a thread ... myThreadVar := 'my value'; // In this point the var will be initialized? 如果我在线
当我们有一个threadvar声明,当这个变量将被初始化(对象被创建)?它是否发生在var的第一个赋值?例如:
threadvar myThreadVar : string; ...... //inside a thread ... myThreadVar := 'my value'; // In this point the var will be initialized? 如果我在线程设置了var的值之后尝试在线程之外使用此var,会发生什么?例如: //at the main thread (application) ... //Call the thread; //thread finishes execution //thread is destroyed ShowMessage(myThreadVar); // what happens here? 解决方法
线程的线程在第一次线程访问任何一个线程时被初始化.它们被设置为默认的全位零值,对于字符串是空字符串.
线程可能是也可能不会被定稿.这取决于RTL获得线程正在终止的通知.因此,最好不要将任何动态分配的类型(包括字符串)存储在线程中.而是使用TThread对象的实例变量来存储线程特定的数据. 你的问题的第二部分是废话.它已经在线程已经终止后在线程上执行代码.没有像线程之外的运行代码这样的东西.所有代码都以线程运行.每个程序至少有一个线程. 每个线程都有自己的一个threadvar副本.没有线程可以读取另一个线程的副本,所以一旦线程终止,它的所有线程都是不可访问的. 您的ShowMessage调用将显示属于当前线程的值,而不是已经终止的线程. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |