IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

POSIX C Discussion :

thread qui prend le controle ...


Sujet :

POSIX C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut thread qui prend le controle ...
    Hello !

    J'ai un petit probleme avec la gestion de mes thread et j'espere vivement que quelqu'un saura m'aider !

    Petit récapitulatif : je lance un thread lorsque j'appuie sur un bouton précis de mon IHM (API windows, C sans MFC.. ). Ce thread créé un fichier et test avec un while la taille de ce fichier. Tant que ce fichier n'a pas la taille convenu, il reste dans le while.

    le probleme est que tant que mon fichier n'a pas la bonne taille, je n'ai plus la main sur mon IHM.. J'aimerai que ca change !!! j'ai tenté de faire le test de la taille du fichier apres le lancement du thread directement dans mon IHM mais sans résultat..

    Quelqu'un connait il une solution ??

    Merci d'avance !

  2. #2
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Ben si tu nous montrez le code du thread s'il te plait...
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  3. #3
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 727
    Points
    1 727
    Par défaut
    Salut,

    Je pense qu'il faut eviter les boucles qui monopolisent le systeme, il doit peut être y avoir un moyen de "s'abonner" à un evenement windows qui intervient quand le fichier change

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    long dureeVideo = pAVIWriter->GetFileSize();
    long temp = dureeVideo;
    bool fini = FALSE;
    printf("duree = %d\n", dureeVideo);
     
    while(!fini)
    {
    
     for(int i = 0; i < 100000000; i++){
    for(int j = 0; j < 100; j++){}
    }
    dureeVideo = pAVIWriter->GetFileSize();
    printf("duree = %d\n", dureeVideo);
    if(temp == dureeVideo)
    {
    fini = TRUE;
    printf(" ok c fini !\n");
    return 0;
    }
    
    temp = dureeVideo;
    }*/
    

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut
    Merci de repondre aussi vite !!


    ca c'est le code dans mon thread... la boucle qui test la taille...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    long dureeVideo = pAVIWriter->GetFileSize();
    long temp = dureeVideo;
    bool fini = FALSE;
    printf("duree = %d\n", dureeVideo);
     
    while(!fini)
    {
     
      for(int i = 0; i < 100000000; i++){
      for(int j = 0; j < 100; j++){}
    }
     
    dureeVideo = pAVIWriter->GetFileSize();
    printf("duree = %d\n", dureeVideo);
     
    if(temp == dureeVideo)
    {
       fini = TRUE;
       printf(" ok c fini !\n");
       return 0;
    }
     
    temp = dureeVideo;
    }
    

    Dans mon callback :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    thread = CreateThread(NULL,0,avi_mux,0,0,NULL);
    wait = WaitForSingleObject(thread,INFINITE);
    CloseHandle(thread); 
    
    C'est pas bete ca de s'abonner a un evenement windows... mais tu connais cmt faire ca ?? Je debute avec l'api windows et je suis pas un crack en prog non plus... Mais j'apprends !

    Merci du coup de main !

  6. #6
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Tu fais une boucle qui ne fait rien, donc elle pompe un gros paquet de ton CPU, malgre que cela soit dans un thread tu perds la main sur ton interface.
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  7. #7
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Est-ce que tu pourrai indenter ton code, je n'ai rien sous la main pour le faire, ca sera deja plus lisible.

    Merci...
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut
    disons que la boucle test a chaque fois la nouvelle taille ... jaimerais trouver un autre moyen de le faire mais lequel ??

    Windows possede t'il des methodes pour tester la taille d'un fichier et envoyer un evenement sur lequel agir ??

  9. #9
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par gdpasmini
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while(!fini)
    {
     
      for(int i = 0; i < 100000000; i++){
      for(int j = 0; j < 100; j++){}
    }
    
    Mais c'est quoi ce monstre ? Tu fais de la programmation multitâche (threads) et tu ne sais pas qu'il ne faut pas mobilier le CPU à ne rien faire ?

    Sleep()

    Il faut arréter de faire n'importe quoi. La programmation, c'est pas un alignement d'instructions plus ou moins hasardeux (tant que ça compîle, je continue...)

    C'est une science (ou une technique) avec une théorie, des principes, des regles... Il faut cesser de bricoler et se former sérieusement...

    Sinon, pour ton problème de sureveillance, peut être que ceci pourrait convenir (WIN32) :

    http://www.developpez.net/forums/sho...65&postcount=7
    Pas de Wi-Fi à la maison : CPL

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut
    Ok j'ai essayé de remplacer les for pa bo par un Sleep tout propre !

    Mais le resultat est le meme.. Je ne vois pas cmt me debarrasser du while.. il faut bien que je test un changement de taille de mon fichier...

  11. #11
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par gdpasmini
    Ok j'ai essayé de remplacer les for pa bo par un Sleep tout propre !

    Mais le resultat est le meme.. Je ne vois pas cmt me debarrasser du while.. il faut bien que je test un changement de taille de mon fichier...
    Le thread doit ête construit comme çà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ... mon_thread(...)
    {
       /* init */ 
     
       /* boucle unique */ 
       for (;;)
       {
          /* traitement */
     
          Sleep(...); 
       }
    }
    On peut aussi prévoir une condition de sortie si besoin est...
    Pas de Wi-Fi à la maison : CPL

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut
    En ce qui concerne la programmation en général, il est pas forcément évident de se former seul a des techniques de programmation et d'acquérir des methodes de developpeurs experimenté...

    Je me doute bien que la prog est une science et j'espere bien parvenir a comprendre toutes les subtilités un jour. Mais avant d'etre capable de mettre sur pied un projet de bout en bout sur papier avant de se lancer ds la prog, il faut avoir une certaine dose de connaissances. Car il est en effet difficile de predir le comportement d'une IHM lorsque l'on a jamais codé avec l'API windows..;

    Je suis donc desolé pour ce post qui t'a peut etre semblé stupide et t'a fait perdre ton tmps. Et merci qd meme pour ta reponse !

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut
    j'ai tenté d'utiliser la fonction présente dans la page que tu m'a donné. le problme est que je ne sais pas ou je dois mettre mon
    ReadDirectoryChangesW. dans mon proc ?? Dans ce cas la, dans quel "case" de mon "switch(msg)" faut il le mettre ?

  14. #14
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par gdpasmini
    j'ai tenté d'utiliser la fonction présente dans la page que tu m'a donné. le problme est que je ne sais pas ou je dois mettre mon
    ReadDirectoryChangesW. dans mon proc ?? Dans ce cas la, dans quel "case" de mon "switch(msg)" faut il le mettre ?
    Aucune idée, je ne connais pas la programmation Windows.

    A voir sur le forum spécialisé "Développement Windows" :

    http://www.developpez.net/forums/forumdisplay.php?f=16
    Pas de Wi-Fi à la maison : CPL

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut
    Ok et merci pour le coup de main !

Discussions similaires

  1. Problème de Thread qui prend trop de mémoire
    Par petozak dans le forum Général Java
    Réponses: 20
    Dernier message: 11/12/2006, 15h24
  2. [mySQL]Requete qui prend 100 % du CPU et n'aboutit pas
    Par LE NEINDRE dans le forum Requêtes
    Réponses: 20
    Dernier message: 12/10/2005, 09h36
  3. CSS : un lien qui prend toute une ligne d'un tableau.
    Par pmithrandir dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 20/04/2005, 16h52
  4. [VB.NET] DataReader qui prend enormement de memoire
    Par JohnGT dans le forum Windows Forms
    Réponses: 9
    Dernier message: 07/01/2005, 17h38
  5. [Thread] comment arreter un thread qui execute une methode b
    Par Cyber@l dans le forum Concurrence et multi-thread
    Réponses: 8
    Dernier message: 04/08/2004, 10h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo