多线程的回调函数问题 ( 积分: 42 )

  • 主题发起人 主题发起人 flyinwuhan
  • 开始时间 开始时间
F

flyinwuhan

Unregistered / Unconfirmed
GUEST, unregistred user!
假设有一个主窗体的成员函数: TFormMain.fun(x:int):bool;
多个线程调用它的时候需要考虑同步问题吗?
 
假设有一个主窗体的成员函数: TFormMain.fun(x:int):bool;
多个线程调用它的时候需要考虑同步问题吗?
 
详细说一下吧
我的线程类是这样的:
type
AEvent = procedure ( b: BOOL ) of object;
AThread = class(TThread)
private
FOnData : AEvent;
protected
procedure Execute;
override;
public
property OnData: AEvent write FOnData;
end;

TForm1...
procedure TForm1.xxx( b: BOOL );
var
i : integer;
begin
if b i:=0 else
i:=1;
end;

thread := AThread.create;
thread.onData := xxx;
thread.resume...
这样多个线程调用同一个回调函数,会有问题吗?
函数TForm1.xxx如果使用全局变量有问题吗?

 
看你的代码是不需要考虑多线程同步问题
 
人呢?
这个问题很难吗?
讨论一下不可以吗?
 
procedure TForm1.xxx( b: BOOL );
var
i : integer;
begin
if b i:=0 else
i:=1;
end;
这个不用考虑吧,当然,如果使用全局变量另当别论
 
你的 TForm1.xxx 这么简单,没有用到form有关的东西,就你这个过程来说,不需要同步
但是你的TForm1.xxx真的就这么简单吗
 
>>但是你的TForm1.xxx真的就这么简单吗
当然不是,我只是为了说明我的函数没有使用全局变量,没有使用vcl
如果这个不是回调函数---很简单,不用讨论,但关键是它是线程的回调函数
也就是多个线程的thread.onData 都指向同一个地址TForm1.xxx
那这个函数内的参数(i : integer;)对于各个线程来说是不是相同的?
会不会一个线程改变了i,而另一个线程恰好要访问i,出现不同步?
 
局部变量(变量i)对各个线程来说是不同的。不会出现不同步的情况
 
多人接受答案了。
 
后退
顶部