Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2417 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C] executer plusieurs boucles en meme temps

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] executer plusieurs boucles en meme temps

n°1857070
san_
A moitié libanais.
Posté le 03-03-2009 à 13:30:38  profilanswer
 

Bonjour,
 
Je commence depuis quelques jours à m'interesser au C (dans un premier temps pour créer un petit daemon de backup à partir de mes scripts bash qui commencent à grossir sérieusement) et je me demandais s'il était possible d'executer 2 boucles (voir +) au même instant. Et si oui comment, bien sûr. J'ai appris rapidement quelques bases du langage mais j'ai rien trouvé la dessus.
Et pendant que j'y suis, j'ai vu plusieurs manières de stocker une chaine de charactère dans une variable. Celle que j'utilise est char nomdemavariable[] = "ma chaine de charactere"; .. est-ce correct ?
 
Merci :jap:

mood
Publicité
Posté le 03-03-2009 à 13:30:38  profilanswer
 

n°1857077
Joel F
Real men use unique_ptr
Posté le 03-03-2009 à 13:47:06  profilanswer
 

plusieurs boucle en meme temps => multi threading soit avec pthread soit avec openMP.

n°1857244
san_
A moitié libanais.
Posté le 03-03-2009 à 19:02:07  profilanswer
 

En fait je m'explique :
 
J'ai mes instructions de backup dans une boucle infinie, et j'aimerais que, par exemple, toutes les x minutes le programme upload les données sauvegardées via ftp - pour l'instant je fais ça avec la fonction system("ftp..." );  :whistle: -. Jusqu'ici sur mon script bash je faisais ça avec un simple if dans cette même boucle.
 
Seulement le même problème se pose ici avec le C : je voudrais que lorsque les données sont en cours d'upload, ma boucle continue de tourner (que le backup continue et que ne soit pas bloqué jusqu'à la fin de l'execution de ftp).
D'où mon idée première de faire 2 boucles qui tournent en même temps : une boucle pour le backup et une boucle pour l'upload.
 
Suis-je clair ? Une idée ? :D

n°1857252
ptitchep
Posté le 03-03-2009 à 19:27:55  profilanswer
 

fork() et exec non?
 
Ca ne marche peut-être que sous linux en fait...
Pour windows je te renvoie à la réponse de Joel.
 
Pour les chaines, oui ca fonctionne mais seulement à l'initialisation du tableau. Sinon il y a strcpy et strncpy (attention y'a des pièges) et d'autres fonctions du genre. man string je crois pour avoir tous les details.

Message cité 1 fois
Message édité par ptitchep le 03-03-2009 à 19:36:45

---------------
deluser --remove-home ptitchep
n°1857255
san_
A moitié libanais.
Posté le 03-03-2009 à 19:55:52  profilanswer
 

Exact en cherchant un peu je suis tombé sur fork (j'utilise jamais windows, seulement osx et debian), je vais regarder ça de plus près. Ca crée un second process, dommage mais bon.


Message édité par san_ le 03-03-2009 à 19:56:05
n°1857275
Joel F
Real men use unique_ptr
Posté le 03-03-2009 à 20:34:17  profilanswer
 

enfin fork c'est genre standard voire POSIX [:dawa]

n°1857276
ptitchep
Posté le 03-03-2009 à 20:37:24  profilanswer
 

Il y a un fork pour windows?


---------------
deluser --remove-home ptitchep
n°1857313
Joel F
Real men use unique_ptr
Posté le 03-03-2009 à 22:35:49  profilanswer
 

j'ai compris de travers je croyé que c'etait l'inverse.
bah sous windows , CreateProcessEx et/ou WinThread.
 
On serait en C++ j'aurais dit boost::asio, boost::interprocess et boost::thread.

n°1858107
san_
A moitié libanais.
Posté le 05-03-2009 à 17:13:58  profilanswer
 

bon finalement j'ai trouvé mon bonheur avec pthread

Code :
  1. #include <stdio.h>
  2. #include <pthread.h>
  3. static void *task_a (void *p_data)
  4. {
  5.    puts ("Hello world A" );
  6.    (void) p_data;
  7.    return NULL;
  8. }
  9. static void *task_b (void *p_data)
  10. {
  11.    puts ("Hello world B" );
  12.    (void) p_data;
  13.    return NULL;
  14. }
  15. int main (void)
  16. {
  17.    pthread_t ta;
  18.    pthread_t tb;
  19.    puts ("main init" );
  20.    pthread_create (&ta, NULL, task_a, NULL);
  21.    pthread_create (&tb, NULL, task_b, NULL);
  22. #if 1
  23.    pthread_join (ta, NULL);
  24.    pthread_join (tb, NULL);
  25. #endif
  26.    puts ("main end" );
  27.    return 0;
  28. }

(exemple qui m'a bien aidé que j'ai trouvé ici)
par contre je ne comprend pas trop à quoi servent void *p_data et le (void) p_data; ici [:transparency]

n°1858130
Emmanuel D​elahaye
C is a sharp tool
Posté le 05-03-2009 à 17:50:23  profilanswer
 

san_ a écrit :

bon finalement j'ai trouvé mon bonheur avec pthread
(exemple qui m'a bien aidé que j'ai trouvé ici)
par contre je ne comprend pas trop à quoi servent void *p_data et le (void) p_data; ici [:transparency]


Il m'avait bien semblé reconnaitre ce code !
 
Les tâches ont obligatoirement un paramètre permettant de traiter des données. Ici, on ne l'utilise pas. Le (void) p_data; permet de dire au compilateur "OK, je n'utilise pas le paramètre, arrête de m'envoyer des avertissements"...
 
Détails d'usage de ce paramètre ici :  
 
http://mapage.noos.fr/emdel/pthreads.htm#donnees


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
mood
Publicité
Posté le 05-03-2009 à 17:50:23  profilanswer
 

n°1858183
ptitchep
Posté le 05-03-2009 à 19:16:24  profilanswer
 

Moi ce que je ne comprends pas c'est  

Code :
  1. #if 1


---------------
deluser --remove-home ptitchep
n°1858184
Emmanuel D​elahaye
C is a sharp tool
Posté le 05-03-2009 à 19:20:10  profilanswer
 

ptitchep a écrit :

Moi ce que je ne comprends pas c'est

Code :
  1. #if 1



Ca vient de mon tutoriel sur pthread.

 

C'est du C de base (préprocesseur) :

 

#if 0 : le code n'est pas compilé,
#if 1 : le code est compilé.

 

Ça permet de [dé]commenter rapidement du code. Ici, c'était pour montrer l'effet de pthread_join() ...
 


Message édité par Emmanuel Delahaye le 05-03-2009 à 19:21:30

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1858185
ptitchep
Posté le 05-03-2009 à 19:22:19  profilanswer
 

C'est l'usage que je voulais savoir pas la signification lol
Merci quand même ;)
Je n'y avais jamais pensé moi j'utilise le menu comment/uncomment de mon IDE favori.


---------------
deluser --remove-home ptitchep
n°1858187
Emmanuel D​elahaye
C is a sharp tool
Posté le 05-03-2009 à 19:23:23  profilanswer
 

ptitchep a écrit :

C'est l'usage que je voulais savoir pas la signification lol
Merci quand même ;)
Je n'y avais jamais pensé moi j'utilise le menu comment/uncomment de mon IDE favori.


Pas portable ...
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1858188
ptitchep
Posté le 05-03-2009 à 19:24:52  profilanswer
 

Mon IDE est portable  :D  
Ok j'ai tord je retiens la technique.


---------------
deluser --remove-home ptitchep

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C] executer plusieurs boucles en meme temps

 

Sujets relatifs
[C#] Boutons personnalisés[C] Allocation dynamique d'une grille de structure.
[RESOLU] - [C#] - NullReferenceExceptionplusieurs fichier xsd
[nxtOSEK] Comment connecter plusieurs Bricks NXT en BluetoothProjet : C ou Java ? Comment modéliser avec GTK ?
[Access] Regrouper plusieurs résultats d'1 requête sur 1 seule ligne?problème #IND et #INF ,C++
executer un programme en une seule ligne de commandeValeur à un champs de plusieurs lignes
Plus de sujets relatifs à : [C] executer plusieurs boucles en meme temps


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR