Multithreading Delphi指针内存和释放
我正在使用自定义windows消息将信息从工作线程交换到主VCL线程中的窗体。每当我需要发送带有消息的数据时,我都会执行以下操作:Multithreading Delphi指针内存和释放,multithreading,delphi,memory,vcl,Multithreading,Delphi,Memory,Vcl,我正在使用自定义windows消息将信息从工作线程交换到主VCL线程中的窗体。每当我需要发送带有消息的数据时,我都会执行以下操作: type PntStr = ^string; 然后PostMessage() 在接收表格上 try myStrP := PntStr(MSG.LParam); myfunction(myStrP^); finally Dispose(myStrP); end; 这是处理指针分配的内存的正确方法吗?在指针上调用Dispose()是否会释放内存?是的
type
PntStr = ^string;
然后PostMessage()
在接收表格上
try
myStrP := PntStr(MSG.LParam);
myfunction(myStrP^);
finally
Dispose(myStrP);
end;
这是处理指针分配的内存的正确方法吗?在指针上调用Dispose()是否会释放内存?是的,您的方法在内存管理方面是正确的<代码>新建和处置正确处理托管类型。这就是他们存在的目的 一些细微差别:
- 检查
的返回值。如果失败,则消息未发布,线程需要释放内存李>PostMessage
- 不要将窗体句柄用作收件人。有一个比赛条件。可以在发布邮件的同时重新创建表单窗口。那么消息就会丢失。或者更糟糕的是,如果句柄被重复使用,则会被传递到另一个窗口。更糟糕的是,窗口可能在错误的线程上重新创建。而是使用
创建一个窗口句柄,您可以控制它的使用寿命李>AllocateHWnd
- 您的
错误。获取资源后,应出现try/finally
。这是我们在这里看到的最常见的错误之一。在您的代码中,它可能是良性的,因为赋值不能引发异常,但它仍然值得精确李>try
try
myStrP := PntStr(MSG.LParam);
myfunction(myStrP^);
finally
Dispose(myStrP);
end;