begin process at 2012 05 30 02:58:59
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Linux

 > 

Autre

 > 

Linux Variable passé a un Thread


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Linux Variable passé a un Thread

lundi 9 octobre 2006 à 12:50:34 | Linux Variable passé a un Thread

mikoo74

Bonjour.

Voila je doit envoyé une chaine a un Thread. 
je fait:

********************************
char * message;
message = new char [1000];

if (pthread_create (&th_tag,NULL,tag_log,message) != 0)
            printf("\nImpossible de démarrer le Thread\n");
*********************************

ensuite dans mon thread je sauve cette variable dans une autre et "j'essai" de libéré le parametre car aparemment il me crée des augmentation mémoire :(

*********************************
void * tag_log(void * arg)
{     
        char mess[5015];

      //Sauvegarde du parametre "special" dans une variable "normal"
        strcpy(mess,(char*)arg);
        delete[] (char*)arg;

       ....
}
*********************************

Aparemment ca ne sert a rien, et si je fait un delete apres le pthread_create cela me creer une erreur au lancement (eereur de segmentation), normal je pense.

comme le prog doit tourner en boucle pendant des jours et des jours j'aimerais que la memoire ne bouge pas d'un poil!apres pas mal d'essai en supprimant de bout de code par ci par la j'en ai deduit que cela vanit de ce passage de parametre...j'ai aussi testé en creer le thread en mode détaché mais pareil... si quelqu'un peut m'aider ... :)

Merci !
lundi 9 octobre 2006 à 13:02:06 | Re : Linux Variable passé a un Thread

luhtor

Je vois pas de pb particulier pour  ton paramètre, mais je connais pas la taille de la pile alloué à un thread. Donc peut etre que ton char mess[5015] deborde. Essai de déclarer avec:
char * mess = new char[5015];

C'est pas sur que ca change qqch mais je vois que ca.
Euh en fait, tu es sur que ta chaine de caractère envoyé au thread a bien un 0 terminal a la fin ?

char * message;
message = new char [1000];
message[999] = 0;                   // <= plus prudent car la fonction strcpy doit rechercher le caractère 0.
lundi 9 octobre 2006 à 14:08:22 | Re : Linux Variable passé a un Thread

mikoo74

Merci pour ta réponse, j'ai testé mais ca grimpe toujours :s . mais c'est vrai que cela ne devrai pas posé de probleme normalement. J' aimerais etre sur de certaines choses, un tableau de char (char toto[1000]), sa memoire est bien libéré en fin de fonction non ? ensuite -> un tableau a 2 dimensions, il se comporte comme un pointeur ou pas???  en fait je ne sais pas tres bien quand est ce que je doit allouer de la memoire a une variable et quand c'est inutile (avec new/delete)...
qu'elles sont les regles de base pour ne pas avoir d' augmentation memoire ?
car je fait bien des mysql_free_result pour mes acces bdd, des delete quand je fait des new, pthread_exit(0) a la fin de mon thread... je ne comprend pas pourquoi une de mes fontions ( qui est un thread ) me provoque cela...
lundi 9 octobre 2006 à 17:17:00 | Re : Linux Variable passé a un Thread

luhtor

Toutes les variables créés dans le tas par "new" doivent etre libéré, pour le reste ya rien a faire.
Utilise le tas, cad new quand tu demandes beaucoup de mémoire.

Les tableaux a 2 dimensions c'est pas prattique, utilise toujours un tableau a une seule dimension.

lundi 9 octobre 2006 à 17:27:33 | Re : Linux Variable passé a un Thread

mikoo74

il y a un autre moyen pour créer un tableau de CHAINE de caracteres ???
lundi 9 octobre 2006 à 18:38:32 | Re : Linux Variable passé a un Thread

luhtor

Ah oui pour les chaines de caractères, ya pas trop le choix.


mardi 10 octobre 2006 à 10:20:05 | Re : Linux Variable passé a un Thread

mikoo74

oé ! hihi. en tout cas merci pour tes reponse.
j'orais une autre question concernant tjs les thread ou plutot les fork !
Car ce que j'aimerais exactement c'est ca :  (en simplifié ;) )

toto()
{
        while(1)
       {
                //connexion bdd
                //ecoute socket udp / recup message
               
                DECROCHEMENT D'UN PROCESS
                   //plusieur fonctions de filtrage

                //fermeture connexion bdd
       }
}

pour linstant je ne creer pas de nouveau process mais j'aimerais beaucoup car je recois enormement de message et les filtres sont assez consequent et je ne souhaiterais en perdre aucun en route ! donc si pour chaque message je pouvais lui attribuer un process ki se tuerais a la fin des fonction de filtrage ... MErci a ceux qui pourront m'aider !!
jeudi 12 octobre 2006 à 08:44:31 | Re : Linux Variable passé a un Thread

max12

Administrateur CodeS-SourceS
J'ai fait un serveur sous Linux (compilé seulement pas pu l'essayer encore)/Windows avec pthread, DB, traitement et sa foncitonne plutôt bien (je compte la déposé ici d'ici la fin de la semaine), j'ai eu des erreur de segmentations au début mais je ne sais plus trop comment je les ait réparé :S Cependant comme tu semble vouloir faire un serveur je te conseillerais de passer une variable contenant la connexion et un thread pour s'occuper de la connexion du traitement et tout. Les forks c'est un peu lourd et la mémoire n'est pas autant partagée qu'avec les threads donc c'est moins conseillé (mais comme il ne s'agit que d'un message tu peux utiliser les Pipe pour envoyer à l'autre processus).

A+

[ Lien ]
Cégep Lévis


Cette discussion est classée dans : tag, message, variable, thread, char


Répondre à ce message

Sujets en rapport avec ce message

thread et parametre char [ par Anacr0x ] Salut,juste une petite question, ya-t-il un moyen simple de mettre une variable caractere en parametre d'un thread ?J'arrive a la faire avec un int ou Thread et variable globale [ par valoue ] Bonjour,Je developpe une application en C++.La classe que je developpe comporte une méthode "recevoir (char *trame). Dans cette méthode, je fais appel Linux C++ Thread [ par mikoo74 ] Salut All !voila j'aimerais me renseigner un peu sur les Thread...Je dois developper un prog qui recupere des message sur un port et qui les traite.se mot apés mot [ par logant83 ] Bonsoir, voila enfaite j'ai coder un truc pour pouvoir stocker les mots d'une chaine char dans plusieur variable. En gros le premier mot est dans la v LAN Socket et multi thread [ par RV2931 ] Bonjour, Je suis en train d'essayer de faire un chat en réseau, chaque machine est client/serveur sur un port. Mais on m'a conseillé de faire un threa Passage de paramètres [ par deck_bsd ] Bonjour/bonsoir a tous,Voila , dans la fonction créate thread il y a un paramètre de type LPVOID qui permet de passer des paramètres au thread. Bon po Char avec des long [ par sebastienmz ] BOnjour voila mon problème : j aimerait metttre dans un tableau de char : l'heure: (la variable long Heure) les minutes : (la variable long Minutes)j Problème de socket non bloquante [ par Rankin ] Bonjour !Je travaille actuellement sur la réalisation d'un chat très sommaire en C. La solution que j'ai adoptée consiste, côté serveur, à avoir un ta variable partagé [ par enrageur ] bonjourDans mon programme, j'ai deux threads. Dans un thread des threads je met à jour régulierement une variable, et dans l'autre je viens lire cette Problème d'affichage de variables [ par Ilmen_ ] Voila, j'ai un problème avec mon code, j'ai mis les erreurs signalés par le compilateur en rouge et sur les lignes correspondantes. Je ne sus pas non


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,246 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales