多线程指针有关问题请问:记录指针传递出错
多线程指针问题请教:记录指针传递出错
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
PTRec_Code = ^TRec_Code;
TRec_Code = packed record
Code,Date: String; //
end;
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
G_Rec_Code : TRec_Code;
implementation
{$R *.dfm}
procedure Ana_Data(TheValues : PTRec_Code);
var
TheRecData : TRec_Code;
begin
TheRecData := TheValues^;
showmessage(TheRecData.Code);
end;
procedure ThrFun_Data();
var
TheThr:thandle;
TheThrID:dword;
begin
G_Rec_Code.Code := '0123';
G_Rec_Code.Date := '2013-08-01';
TheThr := beginthread(nil,0,@Ana_Data,@G_Rec_Code,0,TheThrID);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ThrFun_Data();
end;
end.
/////////////////////////////////////////////
TheRecData.Code
这句出错,请教要如何修改???
------解决方案--------------------
因为showmessage是vcl方法,不是线程安全的,你得做同步操作。
或者你不要showmessage,用messagebox替代
MessageBox(0,PChar(TheRecData.Code),'',MB_OK);
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
PTRec_Code = ^TRec_Code;
TRec_Code = packed record
Code,Date: String; //
end;
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
G_Rec_Code : TRec_Code;
implementation
{$R *.dfm}
procedure Ana_Data(TheValues : PTRec_Code);
var
TheRecData : TRec_Code;
begin
TheRecData := TheValues^;
showmessage(TheRecData.Code);
end;
procedure ThrFun_Data();
var
TheThr:thandle;
TheThrID:dword;
begin
G_Rec_Code.Code := '0123';
G_Rec_Code.Date := '2013-08-01';
TheThr := beginthread(nil,0,@Ana_Data,@G_Rec_Code,0,TheThrID);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ThrFun_Data();
end;
end.
/////////////////////////////////////////////
TheRecData.Code
这句出错,请教要如何修改???
指针 多线程
beginthread
------解决方案--------------------
因为showmessage是vcl方法,不是线程安全的,你得做同步操作。
或者你不要showmessage,用messagebox替代
MessageBox(0,PChar(TheRecData.Code),'',MB_OK);