EXEMPLE DE SERVEUR (MULTI-CLIENTS) TCP (WIN32 / VC++) (11 SEPT 2003 : MAJ)

24Karas Messages postés 233 Date d'inscription jeudi 4 juillet 2002 Statut Membre Dernière intervention 5 juillet 2008 - 13 janv. 2003 à 23:38
psyjc Messages postés 182 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 18 avril 2008 - 20 janv. 2007 à 21:06
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/10279-exemple-de-serveur-multi-clients-tcp-win32-vc-11-sept-2003-maj

psyjc Messages postés 182 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 18 avril 2008
20 janv. 2007 à 21:06
J'ai trouvé.. (ca m'apprendra a pas chercher...)
psyjc Messages postés 182 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 18 avril 2008
20 janv. 2007 à 20:54
Salut blackgoddess.
je me suis inspiré de ton code pour coder un serveur multi clients sur un seul thread mais je le problème qui a été évoqué ci dessus : wsawaitformultipleevent boucle et bouffe 100% proc. comment a tu fais pour régler ce problème et être bloquant dans l'attente d'un évènement ?
Merci d'avance?
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
27 mai 2005 à 10:47
Stood > pour le FD_SETSIZE, on peut en effet changer la valeur.
Malheureusement cette valeur est statique, définie a la compilation.
Je ne connais pas l'implémentation des fd_set, mais je suppose que ca doit etre un tableau. Aussi définir une trop grande valeur par rapport au nombre de clients potentiels pourrait nuire aux performances par exemple.
Ca ne permet donc pas une gestion souple du nombre de clients :(
vinceVD Messages postés 11 Date d'inscription mardi 4 mars 2003 Statut Membre Dernière intervention 26 mai 2005
26 mai 2005 à 15:07
Salut je viens aussi de me truover bloquer a cause de la limite de 64connex, au début je croyé qe ct a cause de XP SP2 mais apparament non.J'ai vu les deux méthode que tu as proposé et je voudrait savoir si quelqu'un a testé une de ces soluces ou tout simplement a réussi a contourner le pb. Merci de vos réponse
vinceVD Messages postés 11 Date d'inscription mardi 4 mars 2003 Statut Membre Dernière intervention 26 mai 2005
26 mai 2005 à 15:07
Salut je viens aussi de me truover bloquer a cause de la limite de 64connex, au début je croyé qe ct a cause de XP SP2 mais apparament non.J'ai vu les deux méthode que tu as proposé et je voudrait savoir si quelqu'un a testé une de ces soluces ou tout simplement a réussi a contourner le pb. Merci de vos réponse
CptLuthor Messages postés 25 Date d'inscription dimanche 7 novembre 2004 Statut Membre Dernière intervention 9 décembre 2004
13 nov. 2004 à 22:39
salut

Quand on est conecter avec ton client et ton server, peut t on se voi en reseau avec un pot, c a d par exemple se voir dans les jeux ?
cs_Stood Messages postés 1 Date d'inscription mardi 25 juin 2002 Statut Membre Dernière intervention 12 août 2004
12 août 2004 à 12:25
salut, dis moi blackgoddess, la limite des 64 clients ne viendrait pas de la variable FD_SETSIZE ?

winsock functions: select()

je cite "Four macros are defined in the header file Winsock2.h for manipulating and checking the descriptor sets. The variable FD_SETSIZE determines the maximum number of descriptors in a set. (The default value of FD_SETSIZE is 64, which can be modified by defining FD_SETSIZE to another value before including Winsock2.h.)"
FreeYo Messages postés 31 Date d'inscription jeudi 31 juillet 2003 Statut Membre Dernière intervention 7 octobre 2004
10 juin 2004 à 16:59
Une mine d’or !!!!

Un grand grand merci !
cs_olecossois Messages postés 18 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 12 mars 2008
16 mars 2004 à 10:31
A quand la version qui dépasse les 60 clients, vraiment on l'attend ce serait vraiment cool

En tout cas ça fonctionne trop bien avec 60 clients

Vraiment très bon code

je mets 10/10
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
21 nov. 2003 à 15:52
sinon, pour eviter la limitation à 62 clients, je vois deux possibilités :

- créer une fenetre (invisible, juste pour ses messages) et faire passer les "evenements" des sockets asynchrones par cette fenetre. avantage : un seul thread créé, limitation du nombre de clients théoriquement a la limite de la machine/système
inconvenient : une application qui utiliserait ce module pour sa gestion du reseau serait plus facilement attacable avec un "hook" de la "callback" de la fenetre (facile a réaliser), ce qui permettrait de recevoir les messages des sockets.

- créer un gestion de thread qui crée un thread tout les 64 clients qui attendent chacun les evenements de 64 sockets.
avantage : plus difficilement attacable a ma connaissance.
inconvenient : ca peut devenir tres lourd s'il y a beaucoup de clients ...

qq1 saurait quelle méthode choisir, ou verrait une autre possibilité ?
merci :)
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
21 nov. 2003 à 01:39
http://www.cppfrance.com/code.aspx?ID=10537
cf netword.h et network.cpp (et status.h et status.cpp)
normalement ca devrait bien tourner ensemble.

(j'y ai d'ailleurs répondu deja un peu plus haut ...)

sinon je grace a la magnifique source de BigInt qui a été posé récement je suis en train d'implémenter la possibilité de créer une connexion cryptée, puis je pense aussi rééecrire cette source, ainsi qu'un client en utilisant les std::string du c++ et la stl (std::vector, p-e d'autres).
Utilisateur anonyme
21 nov. 2003 à 00:58
D'ailleurs, à ce sujet, pourrais-tu mettre un exemple de client, pour qu'on sache comme l'écrire? parce que je pense que mes temps de réponse pas tip top sont dus à ça...
Enfin, si c'est possible.... je sais que c'est pas beau de réclamer ;)

MzF
Utilisateur anonyme
21 nov. 2003 à 00:53
Simple, je suis d'accord ;) mais ça fonctionne bizarrement... est-ce que c'est du à mon client qui prend pas mal de ressources... je sais pas trop.... c'est possible. Ou est-ce que c'est du au fait que j'envoie des char[256] ?
That Is the question....

En tout cas, ça fonctionne pas mal, merci pour ce code ;)

MzF
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
20 nov. 2003 à 19:09
euh ... bizarre les send ... ca m'avait semblé simple a utiliser => g pas tres bien fait gaffe a ca :p, je vais me documenter sur ces fonctions...
Utilisateur anonyme
20 nov. 2003 à 17:45
Salut, j'ai intégré ce code à mon prog et çamarche vraiment bien, par contre, j'ai une question: quand j'utilise la commande Send du Serveur, je suis obligé de la lancer 2 fois de suite, je comprends pas trop pourquoi, est-ce que quelqu'un aurait eu le même problème et aurait trouvé une solution, ou suis-je le seul dans ce cas là?

Un autre truc, je suis obligé de mettre une pause entre 2 Send à des clients différents... Sleep 100, sinon mon 2ieme message n'est pas envoyé...

Voili voilou,
Merci de vos réponses
A+
MzF
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
29 sept. 2003 à 18:21
euh ... alors en fait, la fameuse limite des 64 intervient ici ... WSAWaitForMultipleEvents ne peut pas prendre en compte plus de 64 events ... si on enleve les 3 evenements clientlistchange, heclose, et celui du socket qui ecoute, il doit etre possible de supporter 61 clients ... c'est une decouverte que j'ai faite il y a pas longtemps ...
fyleo Messages postés 11 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 20 novembre 2003
29 sept. 2003 à 17:54
ba en fait j'ai réussi a avoir cette erreur en testant le serveur avec un programme qui connecte plusieur client a la suite (sans les déconnecter) et au bout du 60 iéme le programme a fait cette erreur mais ca peut très bien être du a ce ke les connexion se sont fait trop rapidement pour le programme ^^ mais sinon le serveur marche ss pb
cs_carat Messages postés 13 Date d'inscription mardi 20 mai 2003 Statut Membre Dernière intervention 21 septembre 2009
29 sept. 2003 à 08:57
Zut g oublié que ct de l'html :-)
Je disais donc, il n'y a aucun backslash! Mais je retire ce que j'ai dis car c le site qui les a enlevé, sorry!
cs_carat Messages postés 13 Date d'inscription mardi 20 mai 2003 Statut Membre Dernière intervention 21 septembre 2009
29 sept. 2003 à 08:54
Fyleo, d'après ce que je vois dans ton log, les chemins d'accès de tes librairies sont foireux!, il manque un !!!! Vérifie déjà ça!
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
29 sept. 2003 à 00:51
euh ... qq1 d'autre a un truc semblable ? sinon pense bien a mettre tes libs en multithread ds ton compilo
fyleo Messages postés 11 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 20 novembre 2003
28 sept. 2003 à 13:56
j'ai oublier de dire la ligne ou ca bugguais ^^
c la ligne 614 de network.cpp
dans la fonction "CNetServer::ThreadEntry(CNetServer* MyServ)"
et dans le cas ou ca bug MyServ = 0x0000003e ^^
fyleo Messages postés 11 Date d'inscription jeudi 6 juin 2002 Statut Membre Dernière intervention 20 novembre 2003
28 sept. 2003 à 13:51
slt déjà je te félicite pour cette source vraiment très bien faite et aussi parce que j'ai remarquer un problème d'accès avec le thread
le log du debugguer :

'test.exe' : Chargé 'E:Visual Studio Projects estRelease est.exe', Les symboles ont été chargés.
'test.exe' : Chargé 'C:WINDOWSsystem32
tdll.dll', Aucun symbole n'a été chargé.
'test.exe' : Chargé 'C:WINDOWSsystem32kernel32.dll', Aucun symbole n'a été chargé.
'test.exe' : Chargé 'C:WINDOWSsystem32ws2_32.dll', Aucun symbole n'a été chargé.
'test.exe' : Chargé 'C:WINDOWSsystem32msvcrt.dll', Aucun symbole n'a été chargé.
'test.exe' : Chargé 'C:WINDOWSsystem32ws2help.dll', Aucun symbole n'a été chargé.
'test.exe' : Chargé 'C:WINDOWSsystem32advapi32.dll', Aucun symbole n'a été chargé.
'test.exe' : Chargé 'C:WINDOWSsystem32
pcrt4.dll', Aucun symbole n'a été chargé.
'test.exe' : Chargé 'C:WINDOWSsystem32mswsock.dll', Aucun symbole n'a été chargé.
'test.exe' : Chargé 'C:WINDOWSsystem32wshtcpip.dll', Aucun symbole n'a été chargé.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception non gérée à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Exception de première chance à 0x004014a4 dans test.exe:0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
Le thread 'Thread Win32' (0x8d4) s'est arrêté avec le code -1073741510 (0xc000013a).
Le thread 'Thread Win32' (0xbc8) s'est arrêté avec le code -1073741510 (0xc000013a).
Le programme '[2544] test.exe: Natif' s'est arrêté avec le code -1073741510 (0xc000013a).
voila et encore bravo!!!
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
11 sept. 2003 à 17:56
pour le cryptage, on verra ca plus tard, j'ai pas le niveau de maths appliqués pour ca pour l'instant ... si qq1 a un lien util (les algos je les comprends, mais je n'arrive pas encore a travailler convenablement sur les grands entiers...)

sinon, pour le fantôme, je vais jeter un coup d'oeil ...
cs_carat Messages postés 13 Date d'inscription mardi 20 mai 2003 Statut Membre Dernière intervention 21 septembre 2009
11 sept. 2003 à 10:38
Salut BlackGoddess, c'est encore moi... je dois te paraître embetant mais y'a encore un prob :-)

Faudrait une solution pour gérer les timeout sur les connex clients, car qd un client plante, son "fantôme" reste malgré tout connecté pour le serveur. Ca devient très embetant si le serveur tourne non-stop... à la longue... fin au risque de me répeter, tu risques de remplir ta mémoire inutilement lol... et surtout.. blablabla 'fin tu vois la merde quoi ;-)
ptimine Messages postés 1 Date d'inscription mercredi 10 septembre 2003 Statut Membre Dernière intervention 10 septembre 2003
10 sept. 2003 à 22:34
Respect pour tes compétences. Ce code est bien ficellé ! :) Je vais m'en inspirer pour percer les secrets de la prog reseau et, puisque tu les utilise avec pertinance, les threads également, je ne les connais pas encore.

C'est cool d'aider tant de gens par ton travail sur ce code !
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
24 juin 2003 à 14:04
adrien 78

http://www.cppfrance.com/article.aspx?Val=1567
c'est un exemple de bot irc, il utilise une classe qui peut faire client de ce serveur.
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
24 juin 2003 à 12:53
dsl, boulette dans le code de la dernier MAJ, CNetServer::DelMessID etait completement foireuse, c'est corrigé :)
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
23 juin 2003 à 18:02
MAJ mineure : on peut maintenant configurer pour nettoyer les messages comme disait carat (je l'ai mis en optionnel car par exemple si le client envoit une requete puis se deconnecte, le serveur peut vouloir la traiter malgré la déconnexion), et aussi configurer pour mettre/enlever un message au depart/arrivée d'un client.
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
10 juin 2003 à 09:35
pouarf dieu, la blague :p ...
merci pour le 'petit détail' :) je corrigerais qd j'aurais le tps :)
cs_carat Messages postés 13 Date d'inscription mardi 20 mai 2003 Statut Membre Dernière intervention 21 septembre 2009
10 juin 2003 à 08:27
Salut BlackGoddess,

Ton serveur est nickel, tu as juste oublié un petit détail: quand un client se déconnecte, n'oublie pas de nettoyer les éventuels messages qu'il aurait pu y laisser, sinon tu risques de remplir, à la longue, ta mémoire inutilement!

Bien a toi, hooo dieu! ;-)
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
20 mai 2003 à 09:45
(notez aussi que mon commentaire précédent est truffé de fautes d'orthographe)
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
20 mai 2003 à 09:44
I/O Completion Ports ok je me pencherais de ce coté (note qd meme que je n'utilise pas un nombre de thread egale au nombre de client, mais juste un thread en tache de fond pour gerer les evenements des sockets)
Merci de la remarque :)
cs_Klephte Messages postés 22 Date d'inscription mardi 20 mai 2003 Statut Membre Dernière intervention 4 janvier 2022
20 mai 2003 à 09:33
Ta technique de programmation est originale donc merci pour ce bel effort.
Juste une remarque, si tu permets, j'ai eu l'occasion de développer un serveur IP et pour éviter l'utilisation d'un nombre de thread égal au nombre de clients j'avais,à l'époque, utilisé la technique des "I/O Completion Ports" qui donne les résultats tout à fait exceptionnels.
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
7 mai 2003 à 16:34
MAJ (correction des bugs)
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
2 mai 2003 à 16:23
voila, je viens de finir de coder une classe pour travailler avec des grands entiers, qui va m'etre utile pour le cryptage dont je parlais plus haut :
http://www.cppfrance.com/article.aspx?Val=1775
bapt1080 Messages postés 12 Date d'inscription vendredi 27 décembre 2002 Statut Membre Dernière intervention 30 mars 2005
29 avril 2003 à 09:53
pas mal!
j'avais fait un serveur http en java mais c plus facile avec java
mais comme mon langage de prédilection est le c++ sa le fais bien que tu es fais sa, sa va m'aider a faire très vite des applis en reseau.
je vais chercher pour les events, j'avait pas trop eu de mal avec sa sur mon serveur...
@+
cs_krom Messages postés 5 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 28 avril 2003
26 avril 2003 à 11:58
lu,
désolé pr l'impertinence de ma remarque, ce n'est pas tout à fait ce que je voulais dire.
je suis avec intérêt l'évolution de ce serveur.
dès que tu auras progressé, fais le nous savoir.
bonne chance pour le développement et n'hésite pas à demander un coup de main.
++
cs_krom Messages postés 5 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 28 avril 2003
24 avril 2003 à 10:07
bon, déjà le 24/04 et pas de correction, si tu taffes encore dessus, préviens nous.
merci
cs_krom Messages postés 5 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 28 avril 2003
24 avril 2003 à 10:06
bon, déjà le 24/04 et pas de correction, si tu taffes encore dessus, préviens nous.
merci
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
14 avril 2003 à 22:53
de rien lol, ca fait plaisir des critiques pareilles lol :p

sinon je taff en ce moment sur la correction du bug des ressources par les events ...
grosiflex Messages postés 19 Date d'inscription jeudi 4 octobre 2001 Statut Membre Dernière intervention 21 octobre 2004
14 avril 2003 à 20:37
bah perso, merci pour le source, et les explications sur entercriticalsection();
dechire je galere un peu sur le thread, ce source est franchement cool pour ca, je met 10 directe, car tu t'es bien casser le cul je trouve franchment MERCI !!!
cs_adrien78 Messages postés 23 Date d'inscription lundi 15 avril 2002 Statut Membre Dernière intervention 8 décembre 2008
15 mars 2003 à 09:54
Slt, térrible ton code, il va me permettre de faire bcp de trucs, thx,
cependant, est ce qu' il est possible que tu mettes online un chti client ? histoire de voir comment le tt fonctionne...
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
25 févr. 2003 à 10:19
oui oui bien sur j'avais fait une tite classe client sur le mm modele, et mon client claquait absolument toutes les ressources de mon tit ordi (celui de test), jmen suis rendu compte et corrigé ac les events, je fais faire pareil pour le serveur :)
cs_HotSpot Messages postés 51 Date d'inscription vendredi 7 février 2003 Statut Membre Dernière intervention 28 octobre 2004
24 févr. 2003 à 22:00
merci .. pour les mutex et les samphores je suis au courant ...
sinon merci pour cette breve explication (lol) et sinon utilise les event pour corriger cette source .. bon courage ... ;)
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
24 févr. 2003 à 09:29
sinon, pour les criticals sections, je 'texplique en gros le principe, pour l'utilisation de chaque fonctions (4 au total, plus une 5eme sous win2k/xp), go MSDN

donc, une critical section sert pour le multithread, pour eviter qu'un thread accede à un emplacement mémoire en mm tps qu'un autre.

par exemple ds ce source, le status du serveur peut etre lu/changé par les fonctions du serveur (qui ne sont p-e pas toutes executé par le mm thread), et le thread de gestion des sockets. ainsi, quand un thread veut lire en changer cette variable, il demande à "owner" la critical section. un seul thread peut "owner" la critical section en mm tps, aussi si un autre l'own deja, le thread attend (EnterCriticalSection ne retourne que qd elle a pu owner la CS). donc, une fois que le thread own la critical section, il sait qu'il est le seul a pouvoir accéder à la variable, donc pas de risque de lecture/ecriture simultanée. une fois qu'il a fini, il rend l'own de la critical section avec LeaveCriticalSection, pour qu'un autre thread puisse a son tour l'owner.
voila :)
sinon, g entendu parler des mutex aussi du mm style, sauf que la ca peut aussi fonctionner entre processus, et pas seulement entre threads d'un mm processus.
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
24 févr. 2003 à 09:22
oui oui oui je me suis rendu compte recemment de ce gros bug : en fait, au lieu d'attendre un evenement, le thread de fond tourne en boucle, d'ou son enorme utilisation du temps processeur, des je corrige la source, je la repose.
cs_HotSpot Messages postés 51 Date d'inscription vendredi 7 février 2003 Statut Membre Dernière intervention 28 octobre 2004
23 févr. 2003 à 23:16
salut ...
J'ai vu ton code et il me pose un petit problème ..... L'utilisation des resources system en effet ce dernier parait vraiment tres mais tres gourmant ..... autre chose si t'a une doc sur les threads et ses fonctions telles que CriticalSection passe les moi ... merci !!!
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
30 janv. 2003 à 20:51
ds le zip, main.cpp contient un exemple non ?
cs_deedje Messages postés 8 Date d'inscription mercredi 25 octobre 2000 Statut Membre Dernière intervention 9 août 2003
30 janv. 2003 à 09:36
Salut,

As-tu un exemple d'utilisation de ta classe ? C'est quand même plus facile pour comprendre le fonctionnement....
Merci :))
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
15 janv. 2003 à 17:23
np ;)
NerOcrO Messages postés 33 Date d'inscription mardi 10 octobre 2000 Statut Membre Dernière intervention 27 mai 2004
15 janv. 2003 à 16:26
Merci ma couille, j'attendais ça depuis longtemps.
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
14 janv. 2003 à 19:11
wep, dsl je ferais ca la prochaine fois
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
14 janv. 2003 à 18:27
ca orrai été bien ke tu mettre tous les fichier du projet pour Vc++ dans ton zip...
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
14 janv. 2003 à 08:22
merci :)
ah ! oui c possible que je me sois aussi un peu embrouiller avec les CriticalSection...
24Karas Messages postés 233 Date d'inscription jeudi 4 juillet 2002 Statut Membre Dernière intervention 5 juillet 2008
13 janv. 2003 à 23:38
ça à l'air pa mal du tou : FELICITATION :)
g pa testé mais je m'empresse de le faire ...
Bon courage pour la suite
@++ 24KaraS