多线程 – Delphi指针内存和释放
发布时间:2020-12-15 04:36:16 所属栏目:Java 来源:网络整理
导读:我正在使用自定义 Windows消息将工作线程中的信息交换到主VCL线程中的表单.每当我需要通过消息发送一些数据时,我这样做: type PntStr = ^string; 然后PostMessage() var pointString : PntStr;(...)New(pointString);pointString^ := mystring;PostMessage(
我正在使用自定义
Windows消息将工作线程中的信息交换到主VCL线程中的表单.每当我需要通过消息发送一些数据时,我这样做:
type PntStr = ^string; 然后PostMessage() var pointString : PntStr; (...) New(pointString); pointString^ := mystring; PostMessage(frmDest.Handle,UM_THREADMSG,UM_MYEVENT1,LPARAM(pointString)); 在接收表格上 try myStrP := PntStr(MSG.LParam); myfunction(myStrP^); finally Dispose(myStrP); end; 这是处理指针分配的内存的正确方法吗?在指针上调用Dispose()是否可以释放内存? 解决方法
是的,您的方法在内存管理方面是正确的. New和Dispose正确处理托管类型.这就是他们存在的事情.
一些细微差别: >检查PostMessage的返回值.如果失败,则消息未发布,线程需要处理内存.>不要使用表单的句柄作为收件人.有竞争条件.您可以在发布消息的同时重新创建表单窗口.然后消息将丢失.如果重复使用手柄,或者更糟糕的是送到不同的窗口.或者更糟糕的是,可以在错误的线程上重新创建窗口.而是使用AllocateHWnd创建一个窗口句柄,您可以控制它的生命.>你的尝试/最后是错的.尝试应该在获取资源后出现.这是我们在这里看到的最常见的错误之一.在您的代码中,它可能是良性的,因为赋值不能引发异常,但仍然值得准确. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |