gpt4 book ai didi

multithreading - 来自Delphi类的同步

转载 作者:行者123 更新时间:2023-12-03 18:27:44 24 4
gpt4 key购买 nike

我对Delphi中的多线程有疑问。
假设我有一个线程,并且有一个类,该类完成了一些工作并且必须具有同步性。我该怎么做?
我进行以下过程(在ThreadClass中):

procedure TThreadClass.SynchProc(P: TProc);
begin
...
Synchronize(TThreadProcedure(P));
...
end;

我从我的类中调用它,该类在Thread中运行,但是...
在过程符号“Synchonization”中,是TThread的一种方法,即对象“(作为TThread的自我)”,但是当我从类中调用proc时,变量“Self”不包含我的ThreadClass对象(我不知道,可能是第二类的对象(在Thread中运行)。分别认为该程序不起作用。
我搜索其他变体(我将我的threadClass对象传递给了第二类对象,并尝试从第二类的过程中调用“同步”过程,但是compiller不想对其进行编译)。

你能帮助我吗?将不胜感激

来自乌克兰的问候
PS对不起,我的英语不好

最佳答案

我不确定自己是否100%理解,但我认为您遇到这样的情况。您有一个TThread后代,例如TMyThread。然后该类使用另一个名为TThreadClass的类,该类不从TThread派生。您想从Synchronize方法调用TThreadClass

以下是一些选项:

  • TThread实例传递给TThreadClass。这是一个相当残酷的解决方案。现在,只要调用TThreadClassSynchronize就可以对线程做任何事情。
  • 将引用Synchronize方法的过程变量传递给TThreadClass。这使TThreadClass能够执行所需的操作,而不再需要执行其他操作。
  • 调用TThread.Synchronize类方法,将nil传递给第一个参数。

  • 其中,最终选择是最简单的。您可以这样做:
    procedure TThreadClass.SynchProc(P: TThreadProcedure);
    begin
    TThread.Synchronize(nil, P);
    end;

    请注意,按照问题中的代码传递 TProc并转换为 TThreadProcedure并不是一个好主意。强制调用者传递正确类型的过程变量。在这种情况下,类型转换是良性的,但是您应该始终避免类型转换。

    关于multithreading - 来自Delphi类的同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14414678/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com