Собственно вот в чём заморочка.
Создал проэкт программы, в которой не используются формы (тобишь без оконное приложение) и удалил Form из Uses.
Далее объявил класс потока в юните таким образом.
Код:
unit ServerTCP;
interface
Uses Classes, Sockets, Dialogs;
Type
TCPServerTCP = Class(TThread)
Protected
Procedure Execute; Override;
Private
Public
End;
type
IPData = packed record
LocalDomainName: WideString;
LocalHostAddr: WideString;
LocalHostName: WideString;
LocalHost: WideString;
LocalPort: WideString;
BytesReceived: Integer;
BytesSent: Integer;
end;
implementation
{ TCPServerTCP }
procedure TCPServerTCP.Execute;
var
IP: TIPSocket;
IPInfo: IPData;
begin
ShowMessage('Thread is work');
Try
IP := TIPSocket.Create(nil);
IPInfo.LocalHost := IP.LocalHost;
IPInfo.LocalPort := IP.LocalPort;
Finally
IP.Free;
End;
while Not Terminated do
Begin
End;
end;
end.
В основной программе подключил юнит.
Объявил переменную.
Код:
Uses ServerTCP in 'ServerTCP.pas';{Все подключаемые модули приводить не стану.}
var
Server: TThread;
Далее создаю поток в программе.
Код:
if (Server = Nil) then
Begin
Server := TCPServerTCP.Create(False){Не важно что здесь стоит, True с последующим Server.Resume; ли только False};
DataSend := 'Server to started.';
for I := 1 to LenGth(DataSend) do Data[i-1] := Byte(MidStr(DataSend,i,1)[1]);
SendToIP(Data, LenGth(DataSend),string(inet_ntoa(from.sin_addr)));
End;
Поток создаётся и якобы работает.
Дык вот, так же не имеет значения сколько основная программа будет работать, сообщение 'Thread is work' не появится до тех пор, пока не вызову завершение потока вот так.
Код:
If Not (Server = Nil) then
Begin
Server.Terminate;
Server.Free;
DataSend := 'Server to stopped.';
for I := 1 to LenGth(DataSend) do Data[i-1] := Byte(MidStr(DataSend,i,1)[1]);
SendToIP(Data, LenGth(DataSend),string(inet_ntoa(from.sin_addr)));
End;
В чём беда ? Читал где то что вот якобы поток выполняется определённый системой квант времени. Но как этот квант ему дать ?
Ни кто не работал с потоками в программе без использования TForm ?