procedure MyStr(p:PChar);stdcall;
begin
MessageBoxA(0,p,'提示',0) ;
end;procedure TForm1.Button1Click(Sender: TObject);
var
i,ThreadID : DWord;
begin
for i:= 1 to 3 do
CreateThread(nil, 0, @MyStr,PChar(IntToStr(i)), 0, ThreadID);
end;结果并不是 1 2 3 却是 2 3 3 有谁知道怎么回事?
begin
MessageBoxA(0,p,'提示',0) ;
end;procedure TForm1.Button1Click(Sender: TObject);
var
i,ThreadID : DWord;
begin
for i:= 1 to 3 do
CreateThread(nil, 0, @MyStr,PChar(IntToStr(i)), 0, ThreadID);
end;结果并不是 1 2 3 却是 2 3 3 有谁知道怎么回事?
PCHAR 相当与c语言里的char * 很明显就是个指针;
由于是多线程的原因,所以在这个过程中地址里的内容都有可能被替换掉。
楼上说的有道理但我不赞同“CreateThread执行完之后,该对象就被释放掉,剩下的就只有一个String对象原来的地址”
只有在这个程序段结束的时候对象才被释放的并不是在CreateThread之后就被释放了,只是内容被替换了