在Dephi中,我创建了一个线程,就像这样,它会不时向主窗体发送消息
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;
但是,由于发送到主窗体的 Log 字符串是一个局部变量,调用 SendLog 后会被销毁。而 TForm1.WMUpdateData 是异步处理消息的,所以有可能在调用它的时候,Log 字符串已经被销毁了。如何解决这个问题呢?
我想也许我可以在全局系统空间中分配字符串空间,然后将其传递给消息,然后在 TForm1.WMUpdateData 处理消息之后,它可以破坏全局空间中的字符串空间。这是一个可行的解决方案吗?如何实施?
谢谢