[ Passwd @ 11.01.2006. 10:59 ] @
Prije sam napravio ovaj primjer bez threda i kad se program pokrene i kad se klikne button (tad se postavlja server aktivan i ceka klijenta da se spoji) program se zamrzne sve dok se klijent ne spoji..to sam sad mislio izbjec jer sam napravio zaseban thread al opet je ista stvar... Code: unit Unit5; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Winsock; type TForm5 = class(TForm) Memo1: TMemo; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; type TServerThread=class(TThread) public wsock_port:integer; wsock_Data:TWSAData; wsock_Error:integer; m_Socket:TSocket; AcceptSocket:TSocket; ServerService:SockAddr_in; constructor Create(port:integer); procedure SynError; procedure SynSuccess(msg:String); end; var Form5: TForm5; implementation {$R *.dfm} constructor TServerThread.Create(port:integer); begin inherited Create(false); wsock_error:=WSAStartUp(2,wsock_Data); if wsock_error<>0 then Synchronize(SynError) else begin m_socket:=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if m_socket<>SOCKET_ERROR then begin ServerService.sin_family:=AF_INET; ServerService.sin_addr.s_addr:=inet_addr('127.0.0.1'); ServerService.sin_port:=htons(port); bind(m_socket,ServerService,SizeOf(ServerService)); listen(m_socket,1); SynSuccess('Cekam klijenta da se spoji!'); AcceptSocket:=SOCKET_ERROR; while AcceptSocket=SOCKET_ERROR do begin AcceptSocket:=accept(m_socket,nil,nil); end; SynSuccess('Klijent je uspjesno spojen!'); m_socket:=AcceptSocket; end; end; end; procedure TServerThread.SynError; begin Form5.Memo1.Lines.Add('Error with WinSock!'); end; procedure TServerThread.SynSuccess(msg:String); begin Form5.Memo1.Lines.Add(msg); end; procedure TForm5.Button1Click(Sender: TObject); var MT:TServerThread; begin MT:=TServerThread.Create(13); MT.Terminate; MT.Free; end; end. Nisam koristion Synchronize(SynError) jer bi se onda bezbroj puta taj string dodavao u memo (ne znam zasto) i program bi puko jer bi se preopteretila stack memorija.. I zasto ne mogu pozvat Synhroznize(Ime_Procedure(neki_parametar))... p0z |