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 :

Problèmes de fonctions C++


Sujet :

C++

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 3
    Par défaut Problèmes de fonctions C++
    Bonjour à tous,
    J'ai crée un petit programme "blague" en C++ pour un ami qu'il pourra arrêter grâce au gestionnaire des tâches.
    Le code, le voici :
    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
    27
    #include <windows.h>
    int beep() {
          Beep(rand(), 200);
              Beep(1175, 1000);
                  Beep(1568, 200);
                      Beep(1568, 200);
                          Beep(1245, 1000);
                     Beep(1397, 200);
                  Beep(40101, 200);
               Beep(40101, 200);
        Beep(40101, 200);
    }
    int msgboxloop() {
    		MessageBoxW(NULL, L"Salut :D", L"Joke", MB_SYSTEMMODAL | MB_OK | MB_ICONWARNING);
    }
    int Cursorps() {
    POINT cursor;
    	   GetCursorPos(&cursor);
       SetCursorPos(cursor.x + (rand() % 3 - 1) * (rand() % (0 / 2200 + 2)), cursor.y + (rand() % 3 - 1) * (rand() % (0 / 2200 + 2)));
    }
      int main() {
            while(1) {
    	           beep();
    	        msgboxloop();
    	     Cursorps();
         }
    }
    Il fonctionne mais il y a juste un petit problème : la fonction "cursorps()" (qui déplace le curseur de manière aléatoire à l'écran) ne fonctionne pas à chaque fois que j'execute
    le programme :/ et lorsque je mets une boucle "while" de niveau 1 au niveau de cette fonction : <code>
    les autres fonctions "Beep()" et "Msgboxloop()" se retrouvent bloquées.
    Comment faire pour la fonction "cursorps()" s'éxécute à l'infinie avec les autres fonctions sans bloquer le reste du programme ?
    Merci de vos réponses !

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2011
    Messages : 71
    Par défaut
    Bien que je trouve cette blague de mauvais gout, tu peux utiliser std::async ou std::thread (recommandé).
    Sinon en API windows il y a CreateThread() (c'est du C donc).

  3. #3
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 759
    Par défaut
    Citation Envoyé par pjlan Voir le message
    Sinon en API windows il y a CreateThread() (c'est du C donc).
    Depuis Vista il y a les condition variables (<- lien officiel en anglais)

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 470
    Par défaut
    Sinon, une pompe à message, c'est pas fait pour faire "jolie".

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 3
    Par défaut
    Citation Envoyé par pjlan Voir le message
    Bien que je trouve cette blague de mauvais gout, tu peux utiliser std::async ou std::thread (recommandé).
    Sinon en API windows il y a CreateThread() (c'est du C donc).
    Merci de ta réponse ! :)
    Désolé de t'embêter encore mais...Au niveau de mon code ça donnerais quoi ?

  6. #6
    Membre expérimenté
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2011
    Messages : 71
    Par défaut
    Si j'ai bien compris c'est les MessageBox qui bloquent ?
    l'idée est donc de créer un thread pour le déplacement du curseur du coup ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include <thread>
    std::thread th(Cursorps);
    Par contre dans Cursorps() il faut refaire une boucle infinie.

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 470
    Par défaut
    La bibliothèque graphique Win32 n'est pas multi-thread safe.
    Vous allez directement dans le mur !!!

  8. #8
    Membre expérimenté
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2011
    Messages : 71
    Par défaut
    Autant pour moi je la connais mal (mais c'est vrai que c'était assez évident)
    Dans ce cas effectivement ça va planter a tout va :d

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 3
    Par défaut
    Citation Envoyé par pjlan Voir le message
    Si j'ai bien compris c'est les MessageBox qui bloquent ?
    l'idée est donc de créer un thread pour le déplacement du curseur du coup ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #include <thread>
    std::thread th(Cursorps);
    Par contre dans Cursorps() il faut refaire une boucle infinie.
    D'accord je mets ça dans mon main.
    Deux dernières petites choses, est-ce qu'il y a un moyen de stopper ce thread ou de le relancer à mon aise ?
    Avec la fonction "CreateThread" en C, qu'est-ce que ça pourrait donner ?
    Merci pour ton aide

  10. #10
    Membre expérimenté
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2011
    Messages : 71
    Par défaut
    CreateThread ne va pas résoudre le problème mentionné par bacelar (je t'invite à prendre en compte les remarques des autres personnes) et honnêtement c'est plus compliqué à utiliser.

    la doc est ici => https://docs.microsoft.com/en-us/win...i-createthread
    L'appel doit ressembler à ça pour un appel 'standard' (non-testé) d'après ce que je lis sur la doc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DWORD id;
    CreateThread(NULL,0,Cursorps,NULL,0,&id);
    et la fonction Cursorps doit respecter ce prototype
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DWORD Cursorps(void* data);

  11. #11
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 470
    Par défaut
    Tant que vous court-circuitez la gestion standard des fenêtres, en ne faisant pas de pompe à message, vous allez dans le mur.

  12. #12
    Membre expérimenté
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2011
    Messages : 71
    Par défaut
    Pour info, Bacelar parle de la boucle des messages qui doit ressembler à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
         TranslateMessage(&msg);
         DispatchMessage(&msg);
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. C++ Problème de fonctions et pointeurs
    Par zmatz dans le forum C++
    Réponses: 3
    Dernier message: 01/10/2005, 16h20
  2. [MFC][WINSOCK] Problème avec fonction recv
    Par Le Farfadet dans le forum MFC
    Réponses: 4
    Dernier message: 23/09/2005, 11h00
  3. Problème de fonction
    Par Anduriel dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/05/2005, 20h30
  4. Problème avec fonction d'envoie de mail
    Par zyg dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 23/02/2005, 08h48
  5. [Requête] Problème avec fonction "DATE_FORMAT()"
    Par sekiryou dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/01/2005, 21h52

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