Bonjour à tous,

J'ai lu le tutoriel du site sur les threads (de bob), j'ai complètement découvert les threads mais j'ai quand même quelques difficultés à comprendre comment je peux mettre en place ceci avec mon système client/serveur.

D'après ce que j'ai compris avec un thread je vais pouvoir lancer plusieurs fois une même fonction par exemple, ce qui me permet de lancer deux envois simultanés de fichiers. Jusque là tout va très bien c'est ce que je souhaite faire, voir plus par exemple avec une limite de 5. J'ai compris les idées de synchronisation, mais je me dit que cela est surtout utile pour lancer une action dans un thread et une fois fini executer la seconde dans un autre thread qui attendait.

Donc mes questions sont les suivantes:

Si je lance deux fois le même code d'envoi de fichier, cela veut dire que toutes mes variables créées seront les mêmes dans chacun des threads, dans dès que je vais stocker dans une variable un morceau de mon fichier, l'autre va le modifier en même temps (presque), etc...
Donc comment faire?
Je connais bien ce système:
EnterCriticalSection(&Sync); et LeaveCriticalSection, mais si je fais ça pour toute la partie envoi qui est dans une boucle for, le thread va faire ce qu'il à a faire, le second thread va essayer d'accéder à la même partie de la fonction, il ne pourras pas, pendant ce temps il consommera des ressources processeur à ne rien faire, le premier reprendra, le second ne pourra toujours pas accéder vu qu'on est dans une section critique (il ne peut pas faire la chose en même temps), etc...

Dans en gros il n'y aura qu'un seul thread qui va s'exécuter. Je ne sais pas comment faire en réalité, je suis vraiment novice et je voudrais vraiment comprendre ce que je fais.

Ensuite dans le tuto j'ai vu cette ligne:
"De plus, la réalisation d'applications multithread est souvent source d'erreurs. En effet, il ne faut jamais oublier que des instructions situées dans des threads seront exécutées dans un ordre quelconque.".

Dans si j'ai une suite d'instructions dans ma fonction appelée qui est lancée dans une thread, les instructions ne seront pas exécutées dans l'ordre?

Désolé pour ces questions qui peuvent paraitre illogiques, mais j'ai du mal avec tout ça, c'est vraiment nouveau pour moi.

Merci à vous