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

MFC Discussion :

Boite de dialogue bloquée par un thread


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Par défaut Boite de dialogue bloquée par un thread
    Bonjour,

    Dans ma boite de dialogue principale, je crée un thread qui appelle une fonction plutôt gourmande en ressource CPU.
    Quelque soit le niveau de priorité que je donne au thread les contrôles de ma boites de dialogues sont inaccessibles.

    En théorie un thread permet de découpler les 2 process : gestion de la fenêtre et de contrôles et gestion de ma fonction.

    J'utilise souvent des threads et je n'ai pas ce problème, mais là je suis coincé.

    Merci de votre aide.

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    comment se comporte Windows dans ce contexte ?
    combien de cœurs sur ta machine ?
    comment tu accèdes a tes contrôles de ta dialogue ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Par défaut
    Citation Envoyé par farscape Voir le message
    comment se comporte Windows dans ce contexte ?
    Il n'y a aucun blocage de windows pendant ce temps

    Citation Envoyé par farscape Voir le message
    combien de cœurs sur ta machine ?
    4

    Citation Envoyé par farscape Voir le message
    comment tu accèdes a tes contrôles de ta dialogue ?
    J'ai un simple bouton et je voudrais pouvoir cliquer dessus.

    Je rajoute un exemple. Peut-être que cela pourra vous aider.
    Le simple fait de lancer un nombre important de calcul me bloque l'appli.

    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
    28
    29
    30
    31
    32
    33
    34
    DWORD WINAPI ThreadCalc(LPVOID lpParam)
    {
    	CDialog1 *cDlg1 = (CDialog1*)lpParam;
     
    	HANDLE hFile = CreateFile(name, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); 
     
    	BYTE *bData;
    	DWORD dwRead;
    	int iSize = 1210000;
    	bData = new BYTE[iSize];
    	ReadFile(hFile, bData, iSize, &dwRead, NULL);
    	CloseHandle(hFile);
     
    	unsigned long a;
    	for (int i = 0 ; i < iSize ; i++)
    		for (int j = i ; j < iSize ; j++)
    			a = bData[i]*bData[j];
     
    	delete bData;
    	cDlg1->m_ThreadStatus = 0;
     
    	return 0;
    }
     
    void CDialog1::OnBnClickedButton1()
    {
    	DWORD ThreadId;
    	m_ThreadStatus = 0;
     
    	HANDLE hThread = CreateThread(NULL, NULL, ThreadCalc, this, CREATE_SUSPENDED, &ThreadId);
    	m_ThreadStatus = 1;
    	::ResumeThread(hThread);
     
    }

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 463
    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 463
    Par défaut
    Utilisez les primitives MFC : AfxBeginThread

    http://msdn.microsoft.com/fr-fr/libr...(v=vs.80).aspx

    Si les worker-threads utilisent intensivement le CPU, il est raisonnable de réduire leur niveau de priorité par rapport au thread d'IHM.

  5. #5
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    il y a des exemples dans la faq de worker thread

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 147
    Par défaut
    J'avais aussi essayé avec AfxBeginThread.
    Mais je viens de trouver une solution.
    En fait je crée un thread pour la partie calcul et un thread pour la gestion de l'UI.
    Le problème venait du fait que j'intervenais sur les contrôles juste après le lancement du thread.

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

Discussions similaires

  1. Modification de script: boite de dialogue à remplacer par input
    Par Benjea dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/10/2012, 10h23
  2. Réponses: 2
    Dernier message: 02/02/2011, 11h14
  3. Lancement d'un thread par boite de dialogue
    Par alexadvance dans le forum MFC
    Réponses: 13
    Dernier message: 02/10/2007, 14h54
  4. Réponses: 13
    Dernier message: 09/04/2007, 13h20
  5. Buotons radios avec validation par boite de dialogue
    Par alexbubs dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 16/10/2005, 18h21

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