Page 1 sur 1

Question existentielle sur les Threads

MessagePosté: 08 Avr 2010, 21:39
de Hyperyon
Bonsoir,

En fait je code sous windows, et j'utilise beginthread() pour rendre mon programme multitâche.

Et je voulais savoir quelle était la différence entre beginthread() et CreateThread() ? Les deux permettent de créer des threads...

Re: Question existentielle sur les Threads

MessagePosté: 09 Avr 2010, 12:35
de Tibo
Salut,
alors ça c'est une question existentielle ! Et je risque de ne pas pouvoir t'aider à mieux dormir car je n'ai pas de grandes différences à te donner...
La principale différence c'est que CreateThread est plus dans "l'esprit Windows" tandis que beginthread est plus dans l'esprit "C natif" (même si ça ne marche que sous windows).

Il semblerait que CreateThread soit plus sécurisé que beginthread, mais je ne sais pas pourquoi...

Si tu découvres une réelle différence, n'hésite pas à nous en faire part !

Re: Question existentielle sur les Threads

MessagePosté: 10 Avr 2010, 18:00
de Hyperyon

Re: Question existentielle sur les Threads

MessagePosté: 10 Avr 2010, 19:02
de Tibo
Salut,
d'après les sources que tu cites, c'est _beginthreadex() qui devrait être utilisé à la place de CreateThread... En effet, il semblerait qu'il y ai des fuites de mémoire et même des plantage si des fonctions CRT (C run-time) sont utilisées comme malloc(), fopen(), _open(), strtok(), ctime(), ou localtime()... Donc pas de dangers si on fait du C++ pur, mais bien souvent il arrive de mélanger et dans ce cas, attention aux dégats !

En suivant les liens dans la page que tu proposes, on tombe sur la doc de microsoft qui explique ça...

Donc, je changerais sans doute mes cours pour privilégier l'utilisation de _beginthreadex()...
Merci de ta participation !

Re: Question existentielle sur les Threads

MessagePosté: 10 Avr 2010, 20:28
de Hyperyon
Le fait de combiner les langages C et C++, ça peut engendrer quel genre de problème ?

Parce que j'utilise ces deux langages dans mon projet sans trop me préoccuper :/ des dégâts éventuels...

Sinon pour en revenir aux threads, je trouve ça très laborieux d'en faire sous Windows, on nous propose toute une panoplie de méthodes pour faire la même chose, en plus il y a une tonne de paramètre à inclure. Je comprends mieux pourquoi mon prof nous fait le cours sous Linux.

Re: Question existentielle sur les Threads

MessagePosté: 12 Avr 2010, 20:03
de Tibo
Combiner du C avec du C++, en tant que prof d'informatique, je dois dire "çay le mal"...
Ca te fait charger des DLL supplémentaires, ça risque de te faire faire des erreurs (le ++ du C++, c'est pour + de sécurité et + de garde-fous (interprétation totalement personnelle ;))) et ne faire que de la Programmation Orientée Objets, c'est s'assurer une maintenance simplifié. De plus certaines pratiques du C sont très risquées (en termes de fuites mémoires, prise de contrôle root, etc.) et le C++ a simplifié ça pour éviter de faire des bêtises...

Après, il m'arrive de faire des fonctions, d'utiliser des librairies C et, comble du comble, d'utiliser des variables globales... Mais ça, il faut pas le faire!

Pour ce qui est des threads, ceux de Windows ne respectent pas la norme et donc sont critiquables. Mais leur utilisation n'est pas plus compliquée que les clone() (ou fork() suivant ce que tu as appris) c'est juste que Microsoft aime donner des noms à rallonge à leurs fonctions. Juste une question d'habitude !

En tout cas, bon courage pour la suite !