加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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调用将显示属于当前线程的值,而不是已经终止的线程.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读