X- 20045 X-

前端之家收集整理的这篇文章主要介绍了X- 20045 X-前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当我们有一个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调用显示属于当前线程的值,而不是已经终止的线程.

原文链接:https://www.f2er.com/delphi/101453.html

猜你在找的Delphi相关文章