'By: "jm lyp" <lyp_st@yahoo.fr> Wed, 17 Jul 2002 21:38:13 +0200 (CEST)

'exemples de gestion de socket en UDP
'Adresse de port 1970 et 1963


$INCLUDE "\rapidq\include\RAPIDQ.INC"

'APIs
Declare Function CreateThread Lib "kernel32" Alias "CreateThread" (lpThreadAttributes As long, ByVal dwStackSize As Long, lpStartAddress As Long, lpParameter As long, ByVal dwCreationFlags As Long, lpThreadId As Long) As Long
Declare Function CloseHandle Lib "kernel32"  Alias "CloseHandle" (ByVal hObject As Long) As Long
Declare Sub Sleepw Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)
Declare Function TerminateThread Lib "kernel32" Alias "TerminateThread" (ByVal hThread As Long, ByVal dwExitCode As Long) As Long

'Subs Interne
declare sub thread
declare sub essai(sender as qbutton)
declare sub essai1(sender as qbutton)
declare sub essai2(sender as qbutton)

'les Globales
dim drap as integer
dim numSock as integer
dim numSock1 as integer
dim hThread as long




'Construction de la fenêtre

CREATE Form AS QFORM
     Caption = "Creation de thread"
     Width = 320
     Height = 240
     Center
     CREATE Sock AS QSOCKET
     'création du socket en mode UDP
          Protocol=17
          type=2
     END CREATE
     CREATE Button1 AS QBUTTON
          Caption = "Lancer le Thread"
          Left = 152
          Top = 11
          width=120
          onclick = essai
     END CREATE
     CREATE Button2 AS QBUTTON
          Caption = "Arreter le Thread"
          Left = 152
          Top = 35
          width=120
          onClick= essai1
     END CREATE
     CREATE Button3 AS QBUTTON
          Caption = "Delta T"
          Left = 152
          Top = 60
          width=120
          OnClick= essai2
     END CREATE
     CREATE Edit1 AS QEDIT
          Text = "Edit1"
          Left = 15
          Top = 16
          TabOrder = 9
     END CREATE
     CREATE Edit2 AS QEDIT
          Text = "Edit1"
          Left = 15
          Top =36
          TabOrder = 9
     END CREATE
     CREATE Edit3 AS QEDIT
          Text = "Edit1"
          Left = 15
          Top = 56
          TabOrder = 9
     END CREATE
     CREATE Edit4 AS QEDIT
          Text = "Edit1"
          Left = 15
          Top = 76
          TabOrder = 9
     END CREATE
END CREATE

Form.showmodal

sub essai
'Lance le thread de lecture
     dim lpThreadId as long
     dim test as long
     dim ptrt as long
'init des params
     ptrt=varptr(lpThreadId)
     Add = CODEPTR(thread)
'ouvre la socket mode brodcast xxx.xxx.xxx.255
'Changer l'adresse IP en fonction de la votre
'envoi vers un seul PC IP= 191.9.202.51 a titre d'exemple
'     numSock = Sock.Connect("191.9.202.255", 1963)
'     numSock = Sock.Connect("192.168.0.104", 1963)
     numSock = Sock.Connect("localhost", 1963)
 ShowMessage(Socket.GetPeerName(Sock))
'port reception
     numSock1=sock.open(1970)
'creation du thread
     hThread= CreateThread (byval 0&,byval 0&, Add , byval 0&, ByVal 0&, ptrt )
     edit3.text=str$(hThread)
end sub

sub essai1
'ferme le thread
     dim ess as long
     dim test as long
     ess =TerminateThread(hThread, 0)
     test=CloseHandle(hThread)
'ferme la socket
     sock.writeline(numsock,"fin")
     sock.close(numsock)
     sock.close(numsock1)
end sub

sub thread
     dim t1 as single
     dim este as string*255
     dim i as integer
     drap=0
     'boucle infini
     while drap=0
'lecture de la socket
          if sock.IsServerReady(numSock1)=true then
               edit1.text= Sock.Read(numSock1,32000)
               edit2.text = sock.Gethostip
          end if
          'afin de ne pas manger du temps Process
          sleepw(1)
          sock.write(numsock,str$(timer)+" de T0",len(str$(timer))+6)
          edit3.text=str$(timer-t1)
          t1=timer
     wend

end sub

sub essai2
'sauve garde de edit3 en ms
edit4.text=str$(val(edit3.text)*1000) & " ms"
end sub
