[Pascal / SDL] Problème pour gérer les Threads

Problème pour gérer les Threads [Pascal / SDL] - Delphi/Pascal - Programmation

Marsh Posté le 23-02-2009 à 18:20:57    

Salut à tous !
 
Je dois gérer le réseau d'une application Delphi grâce à SDL.
 
J'ai commencé par me contenter de SDL_Net, qui permet de créer des sockets, d'envoyer et recevoir des données… bref, tout ce qu'il me fallait à un détail près : la réception ou l'envoi de donnée bloque le reste du programme.
 
Incapable de gérer des sockets asynchrones à l'aide de SDL_Net, je me suis tourné vers les threads. Ainsi, j'aimerais avoir un thread à part qui gère l'envoi et la réception de données, et qui communique avec l'application principale grâce à une file. Tout s'est bien passé, ma file dynamique est implémentée, mon application est quasi fonctionnelle… Mais dès que j'ai voulu créer mon premier thread, j'ai rencontré un gros problème !
 
 
 
Passons donc aux choses sérieuses : mon problème ^^
 
Au moment de créer mon thread, j'utilise la fonction SDL_CreateThread qui prend en paramètre la fonction qui doit tourner sur le nouveau thread… Mais en Pascal, la fonction donnée en paramètre est vue comme une valeur, et donc Pascal tente de l'évaluer avant d'effectuer pour de bon la création du thread :-(
 
Ainsi, lorsque je fais SDL_CreateThread(mafonction), mafonction est lancée afin que sa valeur soit donnée en paramètre à CreateThread, alors qu'elle devrait être exécutée dans le thread une fois ce dernier créé !
 
J'ai essayé de faire un pointeur de fonction, sans succès… J'ai essayé à peu près tout ce qui me passait par la tête… mais je n'arrive toujours pas à ce que la fonction ne se lance que dans le thread nouvellement créé !
 
 
 
Voici ce que donne la doc SDL : http://www.libsdl.org/cgi/docwiki.cgi/SDL_CreateThread
Je crois comprendre tout ça, mais c'est du C et ça ne m'aide pas à résoudre mon problème…
 
La documentation de JEDI-SDL : http://jedi-sdl.pascalgamedevelopm [...] hread.html n'est pas beaucoup plus complète !
 
Je ne trouve que des explications en C, que je comprends (sans vraiment connaitre bcp le C) mais qui ne me permette pas de résoudre mon problème...
 
 
 
 
J'aimerais donc savoir si quelqu'un connait suffisamment le Pascal pour m'expliquer comment passer la fonction en argument sans qu'elle soit exécutée trop tôt. Mieux, si quelqu'un a déjà réussi à utiliser SDL_CreateThread en Pascal/Delphi, je veux bien savoir comment ! :)
 
 
 
J'ai aussi créé une mini-application de test (les sources : PasteBin ou *.zip), ou je voudrais créer deux threads qui tournent pendant 5 secondes en incrémentant/décrémentant un compteur et en affichant sa valeur… Pour l'instant, la fonction du premier thread tourne en boucle infinie, bloquant tout le reste et incrémentant le compteur sans jamais s'arrêter :( Comme je vous l'ai expliqué, j'ai bien compris les raisons du problème mais je ne trouve pas de solution...
 
 
Je vais m'arrêter là, sinon personne ne va avoir le courage de me lire !
Si quelqu'un pense pouvoir m'aider, qu'il le fasse :D Je n'en peux plus de chercher sans réponse… si vous avez d'autres conseils de code à propos de mes sources, elles sont aussi les bienvenues !
 
 
 
Merci de m'avoir lu !
 
 
Julien Lehuen, alias Sn00ze92.
 
 
 
 
PS : Voici le site de l'application pour laquelle je dois réussir à faire le réseau : http://www.destruxion.net Il s'agit d'un jeu vidéo en 2D développé dans le cadre de mes études en première année à l'Épita !


Message édité par Sn00ze92 le 23-02-2009 à 18:51:10
Reply

Marsh Posté le 23-02-2009 à 18:20:57   

Reply

Marsh Posté le 24-02-2009 à 17:42:50    

J'ai eu une réponse sur Developpez.com et j'ai de toute façon trouvé la solution… Merci quand même (si ça intéresse quelqu'un, j'ai un peu expliqué comment j'ai fait sur Developpez.com)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed