线程同步问题.

satan_dongdong 2004-10-11 06:55:34
我自己写了一个过程 myProc(str : string);
想在线程中使用同步myThread.Synchronize (myProc);
但是,DELPHI的Synchronize中用的方法必须是无参数的,那该怎么办呢?有什么好的解决方法吗?
...全文
197 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
satan_dongdong 2004-10-14
  • 打赏
  • 举报
回复
本来也想用SYSNCHRONIZE,但是要使用的过程或方法不能带参数,就不用了!!
sztony 2004-10-13
  • 打赏
  • 举报
回复
临界区的性能最好,如果使用SYSNCHRONIZE来同步,还不如不使用多线程.
satan_dongdong 2004-10-12
  • 打赏
  • 举报
回复
请问还有别的方法吗?
satan_dongdong 2004-10-12
  • 打赏
  • 举报
回复
UP
yueyixing 2004-10-12
  • 打赏
  • 举报
回复
你可以在线程中定义一个boolean型的变量,在线程的构造函数中给他赋true,结束的时候赋false。然后检测这个值就行,不过这个值得是全局变量才行
WGYKING 2004-10-12
  • 打赏
  • 举报
回复
同步方式无非就是互斥、临界区、信号量。。。
WGYKING 2004-10-11
  • 打赏
  • 举报
回复
0 建一个这样的类;

1 系统中创建一个TCriticalSection对象
2 线程执行操作前Enter
3 线程执行操作后Leave

4 退出系统前释放对象
WGYKING 2004-10-11
  • 打赏
  • 举报
回复
TSynchroObject = class(TObject)
public
procedure Acquire; virtual;
procedure Release; virtual;
end;

TCriticalSection = class(TSynchroObject)
protected
FSection: TRTLCriticalSection;
public
constructor Create;
destructor Destroy; override;
procedure Acquire; override;
procedure Release; override;
procedure Enter;
procedure Leave;
end;

{ TSynchroObject }

procedure TSynchroObject.Acquire;
begin
end;

procedure TSynchroObject.Release;
begin
end;

{ TCriticalSection }

constructor TCriticalSection.Create;
begin
inherited Create;
InitializeCriticalSection(FSection);
end;

destructor TCriticalSection.Destroy;
begin
DeleteCriticalSection(FSection);
inherited Destroy;
end;

procedure TCriticalSection.Acquire;
begin
EnterCriticalSection(FSection);
end;

procedure TCriticalSection.Release;
begin
LeaveCriticalSection(FSection);
end;

procedure TCriticalSection.Enter;
begin
Acquire;
end;

procedure TCriticalSection.Leave;
begin
Release;
end;
satan_dongdong 2004-10-11
  • 打赏
  • 举报
回复
能说得具体点吗?
WGYKING 2004-10-11
  • 打赏
  • 举报
回复
自己建立临界区

TRTLCriticalSection

比用Synchronize好多了。。。
satan_dongdong 2004-10-11
  • 打赏
  • 举报
回复
看了,不是很明白.现在只要能解决得了同步的问题就好了,什么都OK.
gemouzhi 2004-10-11
  • 打赏
  • 举报
回复
不好意思,手头没D的环境,就是borland的目录 啊
satan_dongdong 2004-10-11
  • 打赏
  • 举报
回复
DEMO的具体位置在哪儿?
WGYKING 2004-10-11
  • 打赏
  • 举报
回复
type TThreadMethod = procedure of object;

可以啊
怎么不可以?
satan_dongdong 2004-10-11
  • 打赏
  • 举报
回复
自己做互斥量,怎么做呢?
gemouzhi 2004-10-11
  • 打赏
  • 举报
回复
哦,对,看看,borland的demo中的那个先程排序,肯定能得到答案
satan_dongdong 2004-10-11
  • 打赏
  • 举报
回复
没写
WGYKING 2004-10-11
  • 打赏
  • 举报
回复
不能自己做互测量么?
gemouzhi 2004-10-11
  • 打赏
  • 举报
回复
no,差太远了,你的myProc是不是写在线程的execute下了。
Synchronize(这里是线程参数);

Synchronize是叫VCL的主线程安全执行VCL方法,U know?

16,742

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧