[Windows] thread comment les créer, les lancer simultanément ???

thread comment les créer, les lancer simultanément ??? [Windows] - C - Programmation

Marsh Posté le 03-09-2003 à 23:22:04    

Bonjour à tous !  :hello:  
 
Je pense que le titre est assez explicite  
 
J'ai fait des recherches sur ce forum, j'ai pas trouvé grand chose que je pouvais comprendre  :pt1cable:  
 
quels avantages présentent les threads ?
pour ma part j'en ai besoin pour pouvoir lancer simultanément deux processus !
 
je programme en C++ sous windows et j'ai fini par trouver un morceau de code utilisant l'api windows et montrant clairement et hyperfacilement comment lancer plusieurs processus simultanément :
 

Code :
  1. #include "stdio.h"
  2. #include "windows.h"
  3. #include "process.h"
  4. #include "winbase.h"
  5. // déclaration de la section critique
  6. // code de la première tâche : PremierThread
  7. DWORD WINAPI PremierThread ( LPVOID IpvThreadParam )
  8. {
  9. int i ;
  10. char chaine [ 8 ] = "BONJOUR" ;
  11.   // Entrée en section critique
  12.   for ( i = 0 ; i < 7 ; i++ )
  13.   {
  14.     printf ( "%c", chaine [ i ] );
  15.     Sleep ( 10 ) ;
  16.   }
  17.   // Libération de la section critique
  18.   return ( 0 ) ;
  19. }
  20. // code de la seconde tâche : SecondThread
  21. DWORD WINAPI SecondThread ( LPVOID IpvThreadParam )
  22. {
  23. int i ;
  24. char chaine [ 8 ] = "BONSOIR" ;
  25.   // Entrée en section critique
  26.   for ( i = 0 ; i < 7 ; i++ )
  27.   {
  28.     printf ( "%c" , chaine [ i ] ) ;
  29.     Sleep ( 10 ) ;
  30.   }
  31.   // Libération de la section critique
  32.   return ( 0 ) ;
  33. }
  34. // point d'entrée du programme
  35. void main ( )
  36. {
  37.   // Initialisation de la section critique
  38.   HANDLE hThreads [ 2 ] ;
  39.   DWORD dwThreadId ;
  40.   DWORD dwThreadParam = 1 ;
  41.   // création des Threads
  42.  
  43.   hThreads [ 0 ] = CreateThread ( NULL, NULL, PremierThread, &dwThreadParam, 0, &dwThreadId ) ;
  44.   hThreads [ 1 ] = CreateThread ( NULL, NULL, SecondThread, &dwThreadParam, 0, &dwThreadId ) ;
  45.   // attente de fin d'exécution des Threads
  46.   WaitForMultipleObjects ( 2, hThreads, TRUE, INFINITE) ;
  47.   // destruction des Threads et de la section critique  
  48.   CloseHandle ( hThreads [ 0 ] ) ;
  49.   CloseHandle ( hThreads [ 1 ] ) ;
  50.   // destruction de la section critique
  51. }


 
on voit clairement dans ce code comment lancer les deux processus en meme temps, j'ai essayé avec un troisième ca passait parfaitement
 
je voudrais savoir (du plus simple possible) comment coder l'équivalent de ce programme sans utiliser l'API windows !
je rappelle que je code sous windows !
 
voila
 
J'attends vos remarques et vos conseils avec impatience
 
Merci à tous !


Message édité par CodeName47 le 03-09-2003 à 23:24:22
Reply

Marsh Posté le 03-09-2003 à 23:22:04   

Reply

Marsh Posté le 03-09-2003 à 23:37:11    

Tu confonds "thread" et "processus". spa pareil :non:  
Ce programme crée plusieurs threads, mais ca reste un unique processus :)

Reply

Marsh Posté le 04-09-2003 à 07:54:34    

Utilise la lib pThread si tu veux pas d'appel a l'api win direct et un code portable (enfin tant que pthread dispo mais c dispo sous plein d os)

Reply

Marsh Posté le 04-09-2003 à 09:29:40    

:pt1cable: oué je confond un peu tout mais j'ai du mal à me retrouver dans tout ca ! je voulais dire un processus qui exécute plusieurs morceaux de codes simultanément
 
je vais essayer de reproduire le meme code avec la librairie pthread, je verrai bien ce que ca donne et je posterai le code une fois le truc terminé pour dire ce que vous en pensé !

Reply

Marsh Posté le 04-09-2003 à 10:39:14    

:( oué bah j'y arrive pas avec pthread, j'ai compris le fonctionnement de cette librairie et de ces fonctions mais mon compilateur (borland c++ 5)me sort un message d'erreur "external unresolved error _pthread_create from test.OBJ"  :??:  
j'ai essayé de télécharger une aute librairie pthread et de la mettre en place = pareil !
 
donc le pthread je laisse tomber, je reste sur l'api windows !

Reply

Marsh Posté le 04-09-2003 à 10:45:22    

Euh juste comem ca en passant ... c bien de DL la lib ... mais c encore mieux de dire a ton compilo de l'utiliser lors du link
 
...
 
ca eviterais les unresolved link ;)

Reply

Marsh Posté le 04-09-2003 à 11:11:41    

:??: lol plus je cherche des explications moins je comprends
 
sous borland, il y a deux fichiers de configurations qui définissent les options lors de la compilation notamment le path qui contient pthread.h et le path qui contient pthread.lib
 
normalement borland devrait les trouver automatiquement nan ?

Reply

Marsh Posté le 04-09-2003 à 11:23:20    

C pas parceque ton compilo (linker) connait le path pour allez chercher une lib qu'il connait le nom de la lib a inclure, c a toi de lui donner le PATH ET le nom de la lib

Reply

Marsh Posté le 04-09-2003 à 11:59:05    

Au passage, "en même temps" ça n'a pas de sens.
Un processeur, plusieurs thread à exécuter dessus...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 04-09-2003 à 12:06:14    

Citation :


Au passage, "en même temps" ça n'a pas de sens.  
Un processeur, plusieurs thread à exécuter dessus...  


 
pas fait exprès, j'ai un peu du mal aujourd'hui avec tout ca  :pt1cable:  
 
bon ce coup ci il prend bien ma librairie en compte mais comme si ca suffisait pas il me sort un second message d'erreur :
 
Error : C:\Borland\BCC55\Lib\pthread.lib contains invalid OMF record, type 0x21 (possibly COFF)
 
c encore plus du chinois que la première erreur ce message la !  :??:

Reply

Marsh Posté le 04-09-2003 à 12:06:14   

Reply

Marsh Posté le 04-09-2003 à 12:35:39    

Ta lib doit être concue pour VC++ et BC++ n'arrive pas à la lire...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 04-09-2003 à 12:40:24    

bah j'ai l'air malin avec mon prog sous borland et ma librairie en VC++  :cry:  
il n'y a meme pas de librairie pthread pour borland = abandon de mon projet  :sweat:  
 
ben merci à tous de vote participation lol
au moins j'aurais appris quelques astuces pour le c++

Reply

Marsh Posté le 04-09-2003 à 13:03:44    

Lis un peu le site officiel de pthread_lib et tu veras la solution a ton pb

Reply

Marsh Posté le 04-09-2003 à 13:04:07    

Ben si tu as les sources tu compiles la lib avec Borland et tout rentre dans l'ordre.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 04-09-2003 à 14:41:46    

pffff j'en ai marre je laisse tomber  :fou:  
 
1. j'ai essayé de recompiler la librairie avec borland c bourré d'erreur
2. quand je réutilise ilink32 en utilisant le pthread.lib normal, il me sort bien mon éxécutable sans problème à partir de mon fichier compilé !  
le problème bah euh : Aplication Win32 non valide = pas top l'éxécutable !
 
ca me soule, je reessaierai quand j'aurais un visual C++ sous la main

Reply

Marsh Posté le 29-04-2004 à 19:27:27    

putin t'est naz tu abandonne come sa , faut juste utiliser un petit prog qui ce trouve fourni avec borland il converti le lib vc++ pour borldand il faut quelle soi en omf et la tu les a en coff normale juste la convertion c'est tous.

Reply

Marsh Posté le 29-04-2004 à 20:51:40    

HelloWorld a écrit :

Au passage, "en même temps" ça n'a pas de sens.
Un processeur, plusieurs thread à exécuter dessus...

Il a jamais dit qu'il y a qu'un processeur :o


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Sujets relatifs:

Leave a Replay

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