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

Threads & Processus C++ Discussion :

bloquer le changement de thread


Sujet :

Threads & Processus C++

  1. #1
    Membre éclairé Avatar de Biosox
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 298
    Par défaut bloquer le changement de thread
    Bonjour,

    je désire, lors de l'initialisation de mon programme, executer quelques instructions. Seulement mon programme est multi-thread, et il faut impérativement que ces fonctions s'excécutent à la suite sans que la main ne soit passée à un autre thread.

    coment faire?
    Une section critique me permet d'empècher un autre thread d'executer une partie bien précise de mon code tant que "moi" je n'en suis pas sorti, mais comment empecher un autre thread de faire quoi que ce soit pendant cette section "super-critique" ?

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Sous Windows, tu peux suspendre tous les autres threads de ton processus (SuspendThread() et ResumeThread() sont là pour ça). Mais ça ne fera rien pour les autres processus...

    Tu peux aussi augmenter la priorité de ton thread avec SetThreadPriority().
    Mais tous les processus avec la classe de priorité "Temps Réel" auront quand même plus de priorité que ce thread-là pour tous leurs threads (et pour mettre un processus en priorité "Temps-Réel", il faut un privilège d'administrateur).

    Mon Conseil: Utiliser SetThreadPriority() et prier pour qu'aucun processus temps-réel ne te pique la place...




    Quand aux systèmes d'exploitation unixoïdes, il y a un truc du même genre avec la fonction nice(). Mais là encore, il faut des privilèges.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre éclairé Avatar de Biosox
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 298
    Par défaut
    Meci, je pense que je vais suivre ton conseil.

  4. #4
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 545
    Par défaut
    tres sincerement la solution (non sure) de la priorite c'est de la bidouille

    au lieu de lancer tout les threads puis de se demander comment les bloquer, lance les un a un et utilises une condition ou autre chose (echange de message etc ...) pour etre sure qu'un thread a fini son initialisation avant d'en lancer un au autre.
    Tu peux aussi ne pas lancer les threads a partir du main (de son thread) mais en serie les uns par les autres une fois l'init de chacun fini
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Mais déjà, ce qu'il faut savoir, c'est s'il faut bloquer au niveau programme ou au niveau du système entier.

    J'ai donné une solution pour chaque. Il doit y en avoir d'autres.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 545
    Par défaut
    il s'agit bien evidemment de thread au niveaux programme

    bloquer toute autre execution n'a aucun sens, on ne connais meme pas ce que font les autres taches et qu'elles seraient les consequences de leur blocage
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

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

Discussions similaires

  1. Empecher / bloquer le changement d'ip
    Par mustang62 dans le forum Réseau
    Réponses: 0
    Dernier message: 06/06/2015, 11h11
  2. Solution pour bloquer le changement de feuille sous Excel
    Par Quent4491 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/06/2011, 11h06
  3. [AC-2000] Comment bloquer le changement d'enregistrement dans un formulaire
    Par gravier3000 dans le forum IHM
    Réponses: 1
    Dernier message: 30/11/2010, 17h41
  4. bloquer le changement d'un onglet
    Par DevServlet dans le forum JSF
    Réponses: 4
    Dernier message: 21/09/2009, 19h08
  5. Réponses: 7
    Dernier message: 03/05/2006, 16h13

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