在客户端 - 服务器之间的套接字连接中,我在线程(在循环中)接收有关远程pc的信息,在另一个线程中接收其他特定信息。
我的问题是因为当创建第二个线程时,第一个线程立即停止,但是我想要使用第二个线程接收的信息是必要的循环,如下面的代码所示。
那么,如何在不停止某些线程的情况下同时执行两个线程?
// Entry point of first thread
procedure TSock_Thread2.Execute;
var
s: String;
begin
inherited;
while not Terminated and Socket.Connected do
begin
if Socket.ReceiveLength > 0 then
begin
s := Socket.ReceiveText;
if Pos('<|CUR|>', s)>0 then begin
TSTMouse := TSock_Thread5.Create(Socket);
TSTMouse.Resume;
Socket.SendText('<|GETCURSORICON|>'); // after this line, TSock_Thread2 stop your execution
end;
end;
end;
// Entry point of second Thread
procedure TSock_Thread5.Execute;
var
s, Ponteiro: string;
begin
inherited;
while not Terminated and Socket.Connected do
begin
if Socket.ReceiveLength > 0 then
begin
s := Socket.ReceiveText;
if Pos('<|MOUSEICON|>', s) > 0 then // receiving mouse icon here
begin
Delete(s, 1, Pos('<|MOUSEICON|>', s) + 12);
Ponteiro := Copy(s, 1, Pos('<|>', s) - 1);
if Ponteiro <> '' then
(Form1.LV1.Selected.SubItems.Objects[2] as TForm2).lblPoint.Caption := Ponteiro;
Sleep(100);
Socket.SendText('<|GETCURSORICON|>'); // request cursor icon again
end;
end;
end;
end;
答案 0 :(得分:2)
你有两个线程从一个插槽读取?从一开始,这通常是一个坏主意。如果真的想要那个,那么你就不能同时阅读它们,因为那不是套接字的工作方式。
任何给定的读者只能读取下一个字节或字节序列。没有内置控件来说明为哪个线程指定了哪些字节。您需要弄清楚如何同步两个线程,以便他们每个人都知道他们何时可以阅读。
另一个想法是只从插槽中读取一个线程。该线程可以读取字节序列,然后将它们分派给其他线程进行处理。