在 Delphi 中,我创建了一个线程,就像这样,它会不时地向主窗体发送消息。
Procedure TMyThread.SendLog(I: Integer);
Var
Log: array[0..255] of Char;
Begin
strcopy(@Log,PChar('Log: current stag is ' + IntToStr(I)));
PostMessage(Form1.Handle,WM_UPDATEDATA,Integer(PChar(@Log)),0);
End;
procedure TMyThread.Execute;
var
I: Integer;
begin
for I := 0 to 1024 * 65536 do
begin
if (I mod 65536) == 0 then
begin
SendLog(I);
End;
End;
end;
其中WM_UPDATEDATA是一个自定义消息,如下所定义:
const
WM_UPDATEDATA = WM_USER + 100;
在主表单中,它将按以下方式更新列表:
procedure TForm1.WMUpdateData(var msg : TMessage);
begin
List1.Items.Add(PChar(msg.WParam));
end;
然而,由于发送到主窗体的日志字符串是一个局部变量,在调用SendLog后将被销毁。由于TForm1.WMUpdateData异步处理消息,因此在调用时,日志字符串可能已经被销毁。如何解决这个问题?
我认为可以在全局系统空间中分配字符串空间,然后将其传递给消息,然后在TForm1.WMUpdateData处理消息后可以销毁全局空间中的字符串空间。这是可行的解决方案吗?如何实现?
谢谢