Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1386 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [MFC] threads et voir autres questions au 7ème message

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MFC] threads et voir autres questions au 7ème message

n°129722
torpe23
Posté le 23-04-2002 à 14:10:34  profilanswer
 

J'ai une petite boite de dialogue avec une barre de loading et un bouton "Lancer". Je voudrais (on s'en doute..) que lorsque j'appuie sur Lancer, la barre se charge. Mais je voudrais que cela soit un thread qui fasse le truc. J'ai donc ma fonction OnLancer déclarée en static :
 
void CLoadingDlg::OnLancer()
{
 AfxBeginThread(ThreadFunc,&m_cLoad);  
}  
ThreadFunc est la fonction de thread et m_cLoad est la variable correspondante à la barre de loading.
 
Puis ma fonction de thread est :
 
UINT CLoadingDlg::ThreadFunc(LPVOID pParam)
{
 CProgressCtrl *pProgress = (CProgressCtrl*)pParam;
 pProgress->SetStep(1);
 pProgress->SetPos(0);
 while(pProgress->GetPos()!=99)
 {
  pProgress->StepIt();
 }
 return 0;
}
 
Et ça veut pas marcher, Visual me fait une erreur :
 
error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned int (__thiscall CLoadingDlg::*)(void *)'
 
Donc voilà ! Merci de m'aider, j'en ai trop marre !
 
Merci d'avance

 

[jfdsdjhfuetppo]--Message édité par torpe23 le 23-04-2002 à 15:32:22--[/jfdsdjhfuetppo]

mood
Publicité
Posté le 23-04-2002 à 14:10:34  profilanswer
 

n°129723
xilebo
noone
Posté le 23-04-2002 à 14:12:17  profilanswer
 

Les fonctions de thread sont soit des fonctions globales , ou alors si c est une méthode de classe, celle ci doit etre déclarée en statique ...

n°129731
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 23-04-2002 à 14:23:23  profilanswer
 

Voici les 2 constructeurs de AfxBeginThread :
 
CWinThread* AfxBeginThread(
   AFX_THREADPROC pfnThreadProc,
   LPVOID pParam,
   int nPriority = THREAD_PRIORITY_NORMAL,
   UINT nStackSize = 0,
   DWORD dwCreateFlags = 0,
   LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL  
);
CWinThread* AfxBeginThread(
   CRuntimeClass* pThreadClass,
   int nPriority = THREAD_PRIORITY_NORMAL,
   UINT nStackSize = 0,
   DWORD dwCreateFlags = 0,
   LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL  
);
 
Tu utilises le 1er constructeur, donc le 1er paramètre doit être un pointeur vers ta fonction ThreadFunc.
 
Essaie ceci :
void CLoadingDlg: nLancer()  
{  
AfxBeginThread(&ThreadFunc,&m_cLoad);  
}

n°129736
xilebo
noone
Posté le 23-04-2002 à 14:27:43  profilanswer
 

Un pointeur vers une fonction est simplement le nom de la fonction ;-)

n°129737
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 23-04-2002 à 14:32:13  profilanswer
 

Euh, oui, autant pour moi !!  :heink:  
J'ai pas percuté, le pire c que j'utilise ça au boulot sans aucun souci !!
 
Essaie ceci :
 
AfxBeginThread(ThreadFunc, this)
 
 :hello:

 

[jfdsdjhfuetppo]--Message édité par Harkonnen le 23-04-2002 à 14:32:59--[/jfdsdjhfuetppo]

n°129746
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 23-04-2002 à 14:55:06  profilanswer
 

Bon, je me suis encore chié dessus !!! Ca m'apprendra à mal lire ton source !
 
En fait, c'est pas la fonction OnLancer qui doit être déclarée en static, mais la fonction ThreadFunc !!

 

[jfdsdjhfuetppo]--Message édité par Harkonnen le 23-04-2002 à 14:55:28--[/jfdsdjhfuetppo]

n°129748
torpe23
Posté le 23-04-2002 à 14:56:08  profilanswer
 

merci à tous mais en fait, ce que j'avais fait marchait : j'avais seulement mis "static" pour le fonction de lancement (celle qui contient AfxBeginThread) au lieu de le mettre pour la fonction de thread. Et donc maintenant, ça marche !

n°129770
torpe23
Posté le 23-04-2002 à 15:35:08  profilanswer
 

AUTRES QUESTIONS !!!
 
Voilà mes autres questions : quand mon thread a fini de rempli ma barre de loading, comment puis je faire pour en être informer et réactiver le bouton "Lancer" ( que j'aurais désactiver en lancant le thread )???
 
en fait, je n'avais qu'une question !  
 
Merci d'avance (encore !)

n°129922
xilebo
noone
Posté le 23-04-2002 à 18:48:42  profilanswer
 

Il y a une fonction qui s appelle WaitForSingleObject, mais je ne sais pas si elle repond a tes besoins


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [MFC] threads et voir autres questions au 7ème message

 

Sujets relatifs
[MFC] Création dynamique d'un CDialogBar avec le contenu d'un CDialog[MFC] Problème avec un menu dynamique
[MFC] Problème de fuites de mémoires que je comprend pas[delphi]ca vous dit quelque chose ce message d'erreur?
[C++Builder] Message Windows de rafraichissement[BCB] Capturer un message envoyé à un compo sans le dériver..
[C++] Message envoyé à une fenêtre lors de sa minimisation ?[C] questions diverses
[ MCD ] Questions sur les relations[ORACLE] Envoyé un message d'erreur ??????
Plus de sujets relatifs à : [MFC] threads et voir autres questions au 7ème message


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR