我正在使用套接字(TServerSocket,TServerClientWinSocket和System.Win.ScktComp中的其他人)在Delphi XE 6中编程,从客户端接收消息的TCP服务器(实际上是HL7消息)处理它并发送响应(确认)。处理包括分析传入消息和执行SQL查询。
所以我编写了一个TSocketThread类,它是一个TServerClientThread后代,它在OnGetThread处理程序中实例化(它在阻塞模式下工作)。
为了避免潜在的超时,我打破了从套接字读取并将消息处理成两个线程。所以我添加了TProcessThread,它表示一个线程和受关键部分保护的字节队列。当TSocketThread从套接字读取一些字节时,它将它们放入TProcessThread的队列中,然后TProcessThread读取它,编写HL7消息,处理并形成响应(确认)。
现在是我问题的主要部分。我将从OnGetThread事件处理程序获得的SocketThread:TServerClientThread传递给TSocketThread和TProcessThread。 TSocketThread读取请求,TProcessThread写入响应。
这是在两个线程之间共享SocketThread的合法方式吗?如果不是,从两个线程访问套接字的正确解决方案是什么(其中一个只读取而另一个只读写)?