Thread ou non avec UDP

Sujets variés concernant le développement en PureBasic
selzig
Messages : 68
Inscription : sam. 11/juil./2009 9:34

Thread ou non avec UDP

Message par selzig »

Bonjour,

je ne connais pas bien PureBasic. J'ai fait un essai, il y a longtemps. Par hasard, je suis retombé sur un article récent intéressant concernant cet IDE. Nouvel essai. J'essaie de porter le début du dernier projet que j'ai réalisé en Qt qui a pour objet de faire communiquer durant des séquences pédagogiques le poste d'un Enseignant avec les postes ou les tablettes d'Elèves, le tout fonctionnant sous protocole UDP.

Chaque poste ou tablette a un interface graphique, en réalité une seule fenêtre dont les "widgets" sont renouvelés au fil de l'avancement de la séance sous le contrôle du poste enseignant.

Schématiquement :
  • Le poste enseignant émet en broadcast sur le port 8000 vers tous les postes élèves
  • Les postes élèves reçoivent donc sur ce port.
  • Les postes élèves émettent vers le poste enseignant par le port 8010 (l'IP du poste enseignant leur a été transmis par le broadcast (&sender en Qt) dès le premier échange)
  • Le poste enseignant reçoit sur le port 8010.
En Qt, j'utilise des échanges asynchrones.

Comme je débute, je me suis basé sur les exemples fournis avec PureBasic (Network Server & Client) que j'ai configurés en UDP. Cela semble fonctionnel. Enfin, je n'ai pas encore testé le broadcast mais la simple liaison Client/Serveur. Mais quand je fais cela avec Delphi, un langage événementiel comme PureBasic, j'utilise des threads secondaires. Est-ce que cela s'impose également avec PureBasic ?

Merci. Gilles

PS : Je suis impressionné par la petite taille des exécutables : Sous Qt (lié statiquement), l'exécutable autonome du poste élève fait plus de 15 Mo, alors que mon test sous PureBasic fait 62 Ko. Comment est-ce possible ? 8O
selzig
Messages : 68
Inscription : sam. 11/juil./2009 9:34

Re: Thread ou non avec UDP

Message par selzig »

Bonjour,

j'ai threadé la réception et j'ai une petite question complémentaire : Normalement l'affichage est sous "tutelle" du thread principal. Or avec PB, je ne vois pas de méthode particulière pour afficher sur une fenêtre à partir d'un thread secondaire comme on le fait par exemple en Lazarus ou en Delphi.

Suis-je passé à côté de quelque chose ?
Merci cordialement. Gilles
Marc56
Messages : 2145
Inscription : sam. 08/févr./2014 15:19

Re: Thread ou non avec UDP

Message par Marc56 »

selzig a écrit : j'ai threadé la réception et j'ai une petite question complémentaire : Normalement l'affichage est sous "tutelle" du thread principal. Or avec PB, je ne vois pas de méthode particulière pour afficher sur une fenêtre à partir d'un thread secondaire comme on le fait par exemple en Lazarus ou en Delphi.
Parce qu'il n'y a besoin de rien de spécial: un thread n'est qu'une procédure qui s’exécute en arrière plan.
Il peut écrire n'importe où, ouvrir des fenêtres etc.
Tant qu'il n'accède pas à des variables des autres procédures, il peut vivre sa vie comme un programme indépendant.
Illustration:

Code : Tout sélectionner

Procedure Hello(*Value)
     Repeat 
          SetWindowTitle(0, FormatDate("%hh:%ii:%ss", Date()))
          Delay(1000)
     ForEver     
EndProcedure

OpenWindow(0, 0, 0, 500, 300, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
EditorGadget(0, 5, 5, 490, 290)

CreateThread(@Hello(), 1)

While WaitWindowEvent() <> #PB_Event_CloseWindow : Wend
La pendule tourne toujours et on peut saisir ou bouger la fenêtre malgré le delay().
Delay() est une instruction bloquante, mais même avec un délai de 10000 on peut continuer à saisir dans l’éditeur.
La procédure en thread vient écrire sur la fenêtre principale sans problème.
selzig
Messages : 68
Inscription : sam. 11/juil./2009 9:34

Re: Thread ou non avec UDP

Message par selzig »

Bonjour,

OK. Merci pour la réponse.
Gilles
Répondre