multithreading - 字符串过早销毁以及如何避免呢?

标签 multithreading delphi delphi-2009 anonymous-methods

我正在使用Delphi 2009,并使用以下代码段得到一些奇怪的错误:

var
  Str     : AnsiString;
  CharPtr : PAnsiChar;
...
CharPtr := PAnsiChar (Str);
ExecuteInBackgroundThread (
  procedure
  begin
  DoSomething (CharPtr);
  end);

我猜想,当超出范围时,在某些计时条件下,字符串会被破坏,DoSomething将产生最奇怪的结果。所以第一个问题是:我说的对吗?

第二个问题是:如何避免被破坏的琴弦?这样做的正确方法是什么?

提前致谢。

最佳答案

So the first question is: am I right?



很有可能,是的。 Delphi的AnsiString被引用计数。当Str超出范围时,引用计数将减少。如果引用计数达到零,则可以重新使用它所占用的内存。

Second question is: How can I circumvent the string being destructed? What's the proper way to to this?



通过不使用指针,如下所示:
var
  Str     : AnsiString;
...
ExecuteInBackgroundThread (
  procedure
  begin
  DoSomething (Str);
  end);

关于multithreading - 字符串过早销毁以及如何避免呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1524776/

相关文章:

java - 如何知道线程需要完成的确切时间

android - 多线程如何在单核cpu上运行

c++ - 我需要构建 TinyThread++ 吗?

c++ - 使用 pthreads 作为类成员的互斥体

delphi - 如何修复损坏的 Delphi 2009 安装

Delphi 2009从字符串中读取oem而无需setCodePage

delphi - 如何将事件作为函数参数传递?

windows - 如何找到当前的 DNS 服务器?

delphi - 编译delphi-pi

multithreading - TMonitor 同步/Application.ProcessMessages