gpt4 book ai didi

multithreading - Delphi 上的线程上下文

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

我正在创建一个启动线程(监听线程)的服务器。该线程监听连接并执行操作。最终它可能会收到一些我想传递给服务器创建者的数据:

我的程序 --> 创建我的服务器 --> 创建监听器 --> 为每个客户端创建一个线程

现在的问题是:如果我分配一个属性 OnData = procedure (const Received: string) of object;当我创建它时传递给服务器,然后,这个相同的过程被传递给客户端线程,所以当线程获取一些数据时,它将能够将它传递回服务器的创建者。在伪代码中:

//My program
MyServer:= TServer.Create();
MyServer.Ondata:= SomeProcedure;

//The client thread
//When data is received
if (FServer <> nil) then
if Assigned(FServer.Ondata) then
Fserver.Ondata(ReceivedString)..

这里的问题是:

1- 我明白如果 10 个线程同时执行这个过程,这个过程将在客户端线程上下文中执行,所以我的程序(过程的实际“所有者”)有责任同步。那正确吗?

2- 如果 10 个不同的线程执行该过程,我是否有 10 个该过程的“实例”同时运行它自己的数据?

3- 我是否还需要保护 Server 对象上的 OnData(例如,使用临界区),还是可以将其留给“实际”过程?

最佳答案

  • 是的。当线程运行时,它运行的所有代码都在其自己的线程上下文中执行,除非该代码已发送到另一个线程,例如使用 Synchronize 方法。
  • 几乎。您有 10 个 TThread 对象实例,每个实例都有自己的数据,同时运行。该过程只有一份实际代码的副本,但多个数据对象可以同时使用它。
  • 任何不是线程安全的代码(可能访问 VCL,或将写入任何共享数据,或从其他可能写入的共享数据中读取)都需要受到保护。
  • 关于multithreading - Delphi 上的线程上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1796859/

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