H
honestman
Unregistered / Unconfirmed
GUEST, unregistred user!
我有TDataList类。定义如下:
TDataList = class
public
constructor create(const BasePath:string);
destructor destroy;override;
function GetSL(i:integer):string;//取数据
procedure WriteSL(s:string);//增加
procedure ShowState(s:string);//用TStringGrid控件显示各线程状态
procedure WriteError(s:string);//在TMemo控件中显示异常情况
protected
SL : TStringList;
DataListLock : Tcriticalsection;
end;
我在主线程中创建TDataList类。
问题:
1、在多线程中不断调用GetSL读SL不写SL,需要线程互斥吗?为什么?多个线程序同时调用一个对象的函数或者过程会不会出问题?
2、在多线程中,不断调用GetSL读SL,偶尔调用WriteSL写SL。需要实现线程互斥,是用临界段DataListLock,还是共享读-独占写呢?为什么?如果用共享读-独占写应该怎么实现?
3、在多线程中,需要调用WriteError函数在TMemo控件中显示异常情况。如果用临界段DataListLock实现的话,DataListLock应该放在WriteError函数中?
procedure TDataList.WriteError(s:string);
begin
DataListLock.Enter;
MainForm.ErrorMemo.Lines.Add(s);
DataListLock.Leave;
end;
还是每次调用WriteError函数都要对WriteError函数进行DataListLock呢?
DataListLock.Enter;
WriteError(s);
DataListLock.Leave;
为什么?还是问题1的最后那个问题,多个线程序同时调用一个对象的函数或者过程会不会出问题?
4、在多线程中,需要调用ShowState函数用TStringGrid控件显示各线程状态,每个线程对应不同的Cells,需要线程互斥吗?为什么?
5、在多线程中,同时用LoadFromFile打开某文件对SL进行赋值会不会产生冲突呢?
TDataList = class
public
constructor create(const BasePath:string);
destructor destroy;override;
function GetSL(i:integer):string;//取数据
procedure WriteSL(s:string);//增加
procedure ShowState(s:string);//用TStringGrid控件显示各线程状态
procedure WriteError(s:string);//在TMemo控件中显示异常情况
protected
SL : TStringList;
DataListLock : Tcriticalsection;
end;
我在主线程中创建TDataList类。
问题:
1、在多线程中不断调用GetSL读SL不写SL,需要线程互斥吗?为什么?多个线程序同时调用一个对象的函数或者过程会不会出问题?
2、在多线程中,不断调用GetSL读SL,偶尔调用WriteSL写SL。需要实现线程互斥,是用临界段DataListLock,还是共享读-独占写呢?为什么?如果用共享读-独占写应该怎么实现?
3、在多线程中,需要调用WriteError函数在TMemo控件中显示异常情况。如果用临界段DataListLock实现的话,DataListLock应该放在WriteError函数中?
procedure TDataList.WriteError(s:string);
begin
DataListLock.Enter;
MainForm.ErrorMemo.Lines.Add(s);
DataListLock.Leave;
end;
还是每次调用WriteError函数都要对WriteError函数进行DataListLock呢?
DataListLock.Enter;
WriteError(s);
DataListLock.Leave;
为什么?还是问题1的最后那个问题,多个线程序同时调用一个对象的函数或者过程会不会出问题?
4、在多线程中,需要调用ShowState函数用TStringGrid控件显示各线程状态,每个线程对应不同的Cells,需要线程互斥吗?为什么?
5、在多线程中,同时用LoadFromFile打开某文件对SL进行赋值会不会产生冲突呢?