我有一个应用程序,主线程(UI 线程)和工作线程。
主线程将一个大字符串传递给工作线程,工作线程根据传递的字符串进行一些工作。
在工作线程执行期间,传递字符串的内容可能会发生更改。
有没有办法复制字符串(例如,在工作线程的构造函数中),以避免可能出现的意外,并在该字符串副本上进行操作?
copy() 或 UniqueString() 是否能达到这个目的?
主线程将一个大字符串传递给工作线程,工作线程根据传递的字符串进行一些工作。
在工作线程执行期间,传递字符串的内容可能会发生更改。
有没有办法复制字符串(例如,在工作线程的构造函数中),以避免可能出现的意外,并在该字符串副本上进行操作?
copy() 或 UniqueString() 是否能达到这个目的?
不需要调用任何东西。Delphi中最常用的字符串(string,AnsiString和UnicodeString)实现了“写时复制”机制。如果一个线程修改了共享字符串,线程将自动创建该字符串的新副本,并修改该副本。
如果您仍然想要一个不被代码的其他部分“拥有”的字符串,可以调用UniqueString(s)。
Insert()
、Delete()
、[]
运算符等)。如果您通过 P(Ansi|Wide)Char
指针直接修改字符串的字符,则所有规则均无效,并且除非您事先显式调用 UniqueString()
,否则 COW 会出错。 - Remy Lebeau