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

C Discussion :

Probleme ds un sleep


Sujet :

C

  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 271
    Par défaut Probleme ds un sleep
    Bonjour,

    voila ma fonction sleep n agit pas et ma fonction random retourne tjrs la meme valeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    for(i=0;i<=client;i++){
    <div style="margin-left:40px">switch(fork()){
    <div style="margin-left:40px">case : 0{
    srand(time(NULL));
    temps = (rand() % 10) + 1;
    sleep(temps);
    printf("client arrive ds %d",temps);
    processusclient();
    }
    ...</div>}</div>}
    Merci a vous !

  2. #2
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Par défaut
    1) avec srand tu initialises la "graine" qui servira au générateur pseudo-aléatoire... tu ne risques donc pas de voir des valeurs différentes avec la même graine

    2) l'affichage de ton message est très mal placé... avant le sleep à la rigueur.
    perso, je le verrais plutôt avant le fork

    3) ça ne compilera pas... fais gaffe aux fautes de copies.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      srand(getpid());
      for(i=0;i<=client;i++){
        temps = (rand() % 10) + 1; 
        printf("client arrive ds %d",temps); 
        switch(fork()) {
            case 0: {
              sleep(temps);
              processusclient(); 
            }
        }
    }
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  3. #3
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 271
    Par défaut
    alors voila ce que ja i fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
     
      for(i=0;i<=client;i++){
        switch(fork()) {
            case 0: {
              srand(getpid());
              temps = (rand() % 10) + 1; 
              printf("client arrive ds %d",temps); 
              sleep(temps);
              processusclient(); 
            }
        }
    }
    J ai fait ca pour que la generation du nombre aleatoire se fasses sur le pid du fils, ca je pense que programme done precedemment generait sur le pid du pere (??)

    l affichage me donne des temps differents a chaque fois mais le sleep ne marche tjrs pas

  4. #4
    Membre Expert Avatar de gnto
    Homme Profil pro
    Ingénieur système logiciel
    Inscrit en
    Janvier 2006
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur système logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 923
    Par défaut
    Heu une question quelle est l'interet de mettre un switch a un cas ?

  5. #5
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par gnto
    Heu une question quelle est l'interet de mettre un switch a un cas ?

    C'est parce qu'il a dû prévoir que fork pouvait renvoyer autre chose que 0 ( notamment en cas d'echec )

  6. #6
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 271
    Par défaut
    vi c ca

  7. #7
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    mais le sleep ne marche tjrs pas
    Donc ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
     
    int main()
    {
            printf("Bonjour\n");
            sleep(5);
            printf("Re...\n");
     
            return EXIT_SUCCESS;
    }
    Affiche les deux ensemble sans attendre 5 secondes?

    Si cela ne marche pas, c'est plutôt une question système qu'autre chose et vu que tu utilises fork, cela se trouvera donc dans le forum Linux.

    Jc

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Citation Envoyé par fearyourself
    Donc ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
     
    int main()
    {
            printf("Bonjour\n");
            sleep(5);
            printf("Re...\n");
     
            return EXIT_SUCCESS;
    }
    Affiche les deux ensemble sans attendre 5 secondes?

    Si cela ne marche pas, c'est plutôt une question système qu'autre chose et vu que tu utilises fork, cela se trouvera donc dans le forum Linux.

    Jc
    Dans un code comme celui la, si il a oublié le \n du premier printf il se peux que les 2 s'affichent en meme temps, mais apres 5 secondes quand meme.

  9. #9
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par Skyrunner
    Dans un code comme celui la, si il a oublié le \n du premier printf il se peux que les 2 s'affichent en meme temps, mais apres 5 secondes quand meme.
    Exact, mais il perceverait quand même l'attente... Ou alors il supposerait que son ordi rame

    Jc

  10. #10
    Membre éclairé Avatar de miron
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    479
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 479
    Par défaut
    Citation Envoyé par fearyourself
    Donc ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
     
    int main()
    {
            printf("Bonjour\n");
            sleep(5);
            printf("Re...\n");
     
            return EXIT_SUCCESS;
    }
    Affiche les deux ensemble sans attendre 5 secondes?

    Si cela ne marche pas, c'est plutôt une question système qu'autre chose et vu que tu utilises fork, cela se trouvera donc dans le forum Linux.

    Jc
    5s c'est pas

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Ca depend du systeme

    Sous Linux la résolution est en sec, donc sleep(5) pour 5 sec
    Sous Windows la résolution est en milliseconde, donc Sleep(5000) pour 5 sec (avec un grand S).

    Pour portabilité voir le module de Emmanuel (je cherche l'adresse des que je la trouve je la post)

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380

  13. #13
    Membre éclairé Avatar de miron
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    479
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 479
    Par défaut
    Citation Envoyé par EMDEL
    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
    #ifndef H_ED_PSLEEP
    #define H_ED_PSLEEP
     
    #if defined (WIN32)
    #include <windows.h>
     
    #define msleep(ms) Sleep(ms)
     
    #elif defined (linux)
    #include <unistd.h>
     
    #define msleep(ms) usleep(ms * 1000)
     
    #endif
     
    #endif /* guard */
    Et ca je ne comprend casiment rien et de plus je doit le metre en debut de mon .c ?

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Tu sauvegardes le psleep.h sur ton dd.

    Et tu fais un #include "psleep.h" dans ton .c.
    Tu met le .h dans le meme repertoire que ton .c aussi.

    Et quand tu veux faire un sleep avec une résolution avec des millisecondes, tu fais (peu importe ton systeme)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    msleep(nombredemilliseconde);
    Pas plus simple pas plus complique.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par miron
    5s c'est pas

    • Tu en a pas assez de dire des aneries ?
    • Tu ne sais pas faire la différence entre sleep() et Sleep() ?
    • Tu ne sais pas que le C est sensible à la casse ?

    et man sleep, ça donne quoi ?

  16. #16
    Membre éclairé Avatar de miron
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    479
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 479
    Par défaut
    Citation Envoyé par Emmanuel Delahaye

    • Tu en a pas assez de dire des aneries ?
    • Tu ne sais pas faire la différence entre sleep() et Sleep() ?
    • Tu ne sais pas que le C est sensible à la casse ?

    et man sleep, ça donne quoi ?
    Et bien si je le sait!!!
    C'est pour ca que j'ai mis une majuscule!!!

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par miron
    Et bien si je le sait!!!
    C'est pour ca que j'ai mis une majuscule!!!
    En réponse à une question unixoïde ?

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par miron
    Et ca je ne comprend casiment rien
    Tu peux être plus précis que "je ne comprend quasiment rien" ?

  19. #19
    Membre éclairé Avatar de miron
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    479
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 479
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    En réponse à une question unixoïde ?

  20. #20
    Membre éclairé Avatar de miron
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    479
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 479
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Tu peux être plus précis que "je ne comprend quasiment rien" ?
    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
    #ifndef H_ED_PSLEEP
    #define H_ED_PSLEEP
     
    #if defined (WIN32)
    #include <windows.h>
     
    #define msleep(ms) Sleep(ms)
     
    #elif defined (linux)
    #include <unistd.h>
     
    #define msleep(ms) usleep(ms * 1000)
     
    #endif
     
    #endif /* guard */
    Dans tt ce code je ne comprend que if , define, elif, endif.
    Je ne sait pas si l'on apprend ca avec le C ou si il ya un language "preproceseur".

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 3
    Dernier message: 30/03/2010, 16h31
  2. [PHP-JS] probleme avec fonction sleep()
    Par m_jaz3 dans le forum Langage
    Réponses: 8
    Dernier message: 26/12/2007, 14h04
  3. Réponses: 5
    Dernier message: 27/09/2006, 14h07
  4. Problème avec un sleep
    Par Treuze dans le forum Linux
    Réponses: 24
    Dernier message: 09/06/2006, 12h23
  5. [langage] fonction sleep + probleme fenetre dos
    Par yokito dans le forum Langage
    Réponses: 2
    Dernier message: 30/08/2003, 19h46

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