在线程里访问自定义过程出错:((50分)

  • 主题发起人 主题发起人 lcl_003
  • 开始时间 开始时间
L

lcl_003

Unregistered / Unconfirmed
GUEST, unregistred user!
我在一个窗体里定义了一个自定义过程
type
Trunselect = class(TForm)
ComboBox1: TComboBox;
ComboBox2: TComboBox;
ComboBox3: TComboBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
procedure Button2Click(Sender: TObject);
procedure senddata21();
//就是这个
procedure FormClose(Sender: TObject;
var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

然后在这个过程里我去读了一个文本文件。
我在一个线程里会定时调用这个过程,但是每次在线程里调用这个过程都出错。
procedure MyThread.Execute;
begin
......... //设定何时调用自定义过程
runselect.senddata21();
end;

在线程和自定义过程里我用到了动态数组,是两个不同的变量,每次使用动态分配长度,
和这个用关系吗?
 
不知道你的这个错误是什么样子的?
按照我的想法,在线程中需要考虑线程访问的安全,也就是并发吧。
可以将senddata2()定义为,线程过程(无参数)。
然后使用Synchronize(senddata2);
呵呵,试试吧!:)
 
好像是
Synchronize(senddata2);
 
恩,我也想到是这个问题了,我试试
 
是说我将senddata21定义在线程里吧,而不是定义在窗体里?
 
你那个错误描述是什么呀?
 
错误看不懂,好象是访问内存地址错误一类的。
问题我现在解决了,不过我没把senddata21()定义在线程里,而是在线程里调用时加上
Synchronize(runselect.senddata2);
就可以了,谁给说说是因为什么?
 
这就是上面说的线程安全的问题了。呵呵。
比如说你多个线程同时访问一个变量或者其它什么的时候,
让哪个线程来做访问操作呢?这就是产生错误的原因了。
 
VCL不是线程安全的,必须同步
 
多人接受答案了。
 
后退
顶部