executer plusieurs boucles en meme temps [C] - C - Programmation
Marsh Posté le 03-03-2009 à 13:47:06
plusieurs boucle en meme temps => multi threading soit avec pthread soit avec openMP.
Marsh Posté le 03-03-2009 à 19:02:07
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..." ); -. 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 ?
Marsh Posté le 03-03-2009 à 19:27:55
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.
Marsh Posté le 03-03-2009 à 19:55:52
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.
Marsh Posté le 03-03-2009 à 20:37:24
Il y a un fork pour windows?
Marsh Posté le 03-03-2009 à 22:35:49
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.
Marsh Posté le 05-03-2009 à 17:13:58
bon finalement j'ai trouvé mon bonheur avec pthread
Code :
|
(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
Marsh Posté le 05-03-2009 à 17:50:23
san_ a écrit : bon finalement j'ai trouvé mon bonheur avec pthread |
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
Marsh Posté le 05-03-2009 à 19:16:24
Moi ce que je ne comprends pas c'est
Code :
|
Marsh Posté le 05-03-2009 à 19:20:10
ptitchep a écrit : Moi ce que je ne comprends pas c'est
|
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() ...
Marsh Posté le 05-03-2009 à 19:22:19
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.
Marsh Posté le 05-03-2009 à 19:23:23
ptitchep a écrit : C'est l'usage que je voulais savoir pas la signification lol |
Pas portable ...
Marsh Posté le 05-03-2009 à 19:24:52
Mon IDE est portable
Ok j'ai tord je retiens la technique.
Marsh Posté le 03-03-2009 à 13:30:38
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