Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading Delphi/Indy多线程服务器_Multithreading_Delphi_Indy - Fatal编程技术网

Multithreading Delphi/Indy多线程服务器

Multithreading Delphi/Indy多线程服务器,multithreading,delphi,indy,Multithreading,Delphi,Indy,我正在尝试将我的应用程序转为多线程。我想要实现的是: -通过TidHTTPServer接收命令 -执行本地操作(可能涉及使用TIDWTTP向其他服务发送/接收数据) -将执行结果返回给原始调用者 由于我对多线程技术相当陌生,我想知道我的设计思想是否正确 TMsgHandler=Class(TThread) 在TidHTTPServer.OnCommandGet中,我创建了一个新的TMsgHandler实例,并传递了ARequestInfo和AResponseInfo TMsgHandler。对数

我正在尝试将我的应用程序转为多线程。我想要实现的是: -通过TidHTTPServer接收命令 -执行本地操作(可能涉及使用TIDWTTP向其他服务发送/接收数据) -将执行结果返回给原始调用者

由于我对多线程技术相当陌生,我想知道我的设计思想是否正确

  • TMsgHandler=Class(TThread)
  • 在TidHTTPServer.OnCommandGet中,我创建了一个新的TMsgHandler实例,并传递了ARequestInfo和AResponseInfo
  • TMsgHandler。对数据进行异常处理
  • TMsgHandler.execute能否在我的Main中使用对象(TidHTTP的后代)与其他服务通信
  • TMsgHandler通过AResponseInfo发送应答并终止
  • 这行吗?

    这不是正确的设计。
    THTTPServer
    是一个多线程组件。它的
    OnCommand…
    事件在Indy为您创建的工作线程上下文中激发


    因此,您不需要从
    TThread
    派生
    TMsgHandler
    。直接在
    OnCommand…
    线程的上下文中执行
    TIdHTTP
    。在事件处理程序退出之前,不会将响应发送回客户端(除非手动发送)。但是,您不应该从主线程共享一个
    TIdHTTP
    (除非您绝对需要,在这种情况下,您需要同步对它的访问)。您应该根据需要直接在
    OnCommand中动态创建一个新的
    TIdHTTP
    /
    TMsgHandler
    代码。

    好的,谢谢。因为我正在访问的服务需要OAuth,所以我想在开始时初始化连接,并使用那些经过身份验证的套接字…:-/当然,我可以将令牌从OnCommand传递到线程中。。。好的,谢谢你的开始指导。我将看到我的结局。:-)@WolfgangBures您至少可以将
    TIdHTTP
    对象汇集在一起,并根据需要将它们分发给
    OnCommand…
    线程,然后在完成后将它们放回池中。只要确保池是线程安全的。