[MFC]Thread

Thread [MFC] - C++ - Programmation

Marsh Posté le 13-03-2005 à 19:31:39    

bon voila mon probleme je suis en train de faire une horloge en c++ pour un projet et elle utilise un thread.
 
Quand je compile le prog j'ai cette erreur: error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned int (void *)'
 
 
QQ peut t'il m'aider a resoudre se probleme voici le code

Code :
  1. UINT CHorlogeDlg::m_ThreadHorloge(LPVOID pParam)
  2. {
  3. bool bTopSeconde=false;
  4. CTime horloge = CTime::GetCurrentTime();
  5. //CTime horloge;
  6. int nHeure;
  7. int nMin;
  8. int nSec;
  9. CString strHeure;
  10. CString strMin;
  11. CString strSec;
  12. do
  13. {
  14.  Sleep(1000);
  15.  nHeure=horloge.GetHour();
  16.  nMin=horloge.GetMinute();
  17.  nSec=horloge.GetSecond();
  18.  CStatic * heure=(CStatic*)GetDlgItem(IDC_TEXT_HEURE);
  19.  CStatic * min=(CStatic*)GetDlgItem(IDC_TEXT_MIN);
  20.  CStatic * sec=(CStatic*)GetDlgItem(IDC_TEXT_SEC);
  21.  strHeure.Format("%d",nHeure);
  22.  strMin.Format("%d",nMin);
  23.  strSec.Format("%d",nSec);
  24.  if(!bTopSeconde)
  25.  {
  26.   heure->SetWindowText(strHeure);
  27.   min->SetWindowText(strMin);
  28.   sec->SetWindowText(strSec);
  29.   bTopSeconde=true;
  30.  }
  31.  else
  32.   bTopSeconde=false;
  33.  Invalidate();
  34. }while(m_bFin!=true);
  35. return 1;
  36. }
  37. void CHorlogeDlg::OnOK()
  38. {
  39. AfxBeginThread(m_ThreadHorloge, 0,THREAD_PRIORITY_LOWEST);
  40. CDialog::OnOK();
  41. }

Reply

Marsh Posté le 13-03-2005 à 19:31:39   

Reply

Marsh Posté le 13-03-2005 à 20:02:18    

T'as l'erreur, t'as la fonction, il te faut quoi de plus? Il y a un pb avec un de tes paramètres...
http://search.microsoft.com/search [...] &s=1&swc=0


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 13-03-2005 à 20:06:01    

oui j'veux bien mais j'vois pas la solution meme avec la msdn excuse moi mais c'est mon premier thread :??:

Reply

Marsh Posté le 13-03-2005 à 20:07:21    

L'erreur te dit (en gros) qu'aucune fonction appelée AfxBeginThread ne prend de premier paramètre de ce type...donc à priori revois le prototype de ta fonction...


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 13-03-2005 à 20:12:14    

à vue de nez, en lisant le second lien de la page que je t'ai filé, je dirais que ta fonction ne doit pas être une fonction membre d'une classe...

Citation :


pfnThreadProc
    Points to the controlling function for the worker thread. Cannot be NULL. This function must be declared as follows:
 
UINT MyControllingFunction( LPVOID pParam );
 
 


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 13-03-2005 à 20:27:50    

skeye a écrit :

à vue de nez, en lisant le second lien de la page que je t'ai filé, je dirais que ta fonction ne doit pas être une fonction membre d'une classe...

Citation :


pfnThreadProc
    Points to the controlling function for the worker thread. Cannot be NULL. This function must be declared as follows:
 
UINT MyControllingFunction( LPVOID pParam );
 
 



effectivement :jap:


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 13-03-2005 à 20:49:51    

donc si j'ai bien compris en la mettant en dehors de toute classe ca doit marché

Reply

Marsh Posté le 13-03-2005 à 20:54:14    

nan j'dis des conneries c'est pas possibles sinon mes getdlgitem sont hs
 
CA M'ENERVE :cry:

Reply

Marsh Posté le 13-03-2005 à 21:23:55    

c'est pas sympa de laisser les gens dans la merde j'ai passer l'apres midi sur ca et si je pose la question sur ce forom c'est que je trouve pas la solution please help me :(

Reply

Marsh Posté le 13-03-2005 à 22:05:19    

dreamkiller a écrit :

nan j'dis des conneries c'est pas possibles sinon mes getdlgitem sont hs
 
CA M'ENERVE :cry:


 
Il faut passer les bons paramètres, c'est tout!:o
Tu passes this comme paramètre, et dans ta fonction de thread tu castes ton LPVOID en CHorlogeDlg* et c'est gagné...:o


Message édité par skeye le 13-03-2005 à 22:09:00

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 13-03-2005 à 22:05:19   

Reply

Marsh Posté le 13-03-2005 à 22:07:34    

Toujours en suivant les liens dans la doc citée plus haut, on trouve cet exemple, d'ailleurs :

Code :
  1. UINT MyThreadProc( LPVOID pParam )
  2. {
  3.     CMyObject* pObject = (CMyObject*)pParam;
  4.     if (pObject == NULL ||
  5.         !pObject->IsKindOf(RUNTIME_CLASS(CMyObject)))
  6.     return 1;   // if pObject is not valid
  7.     // do something with 'pObject'
  8.     return 0;   // thread completed successfully
  9. }
  10. // inside a different function in the program
  11. .
  12. .
  13. .
  14. pNewObject = new CMyObject;
  15. AfxBeginThread(MyThreadProc, pNewObject);


 
Je t'avais donné toutes les pistes pour te démerder tout seul, si tu fais pas l'effort de les suivre on est pas là pour te pondre des solutions toutes cuites, hein...


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 18-03-2005 à 10:33:07    

ca y est ca marche j'ai repris le prob le lendemin apres une bonne nuit de sommeil j me suis replongé dans la msdn et j'a itrouver ce qui allais pas  
 
 
je met le code si des fois ca interesse qq
 
 

Code :
  1. UINT ThreadHorloge(LPVOID pParam)
  2. {
  3. CHorlogeDlg* pObject = (CHorlogeDlg*)pParam;
  4. bool bTopSeconde=false;
  5. CTime horloge /*= CTime::GetCurrentTime()*/;
  6. int nHeure;
  7. int nMin;
  8. int nSec;
  9. CString strHeure;
  10. CString strMin;
  11. CString strSec;
  12. while(pObject->m_bFin!=true)
  13. {
  14.  horloge = CTime::GetCurrentTime();
  15.  nHeure=horloge.GetHour();
  16.  nMin=horloge.GetMinute();
  17.  nSec=horloge.GetSecond();
  18.  CStatic * heure=(CStatic *)pObject->GetDlgItem(IDC_TEXT_HEURE);
  19.  CStatic * min=(CStatic *)pObject->GetDlgItem(IDC_TEXT_MIN);
  20.  CStatic * sec=(CStatic *)pObject->GetDlgItem(IDC_TEXT_SEC);
  21.  strHeure.Format("%d",nHeure);
  22.  strMin.Format("%d",nMin);
  23.  strSec.Format("%d",nSec);
  24.  heure->SetWindowText(strHeure);
  25.  min->SetWindowText(strMin);
  26.  sec->SetWindowText(strSec);
  27.  pObject->Invalidate();
  28.  Sleep(1000);
  29. }
  30. return 1;


 
appel du thread

Code :
  1. m_pTHreadHorloge=AfxBeginThread(ThreadHorloge,this/*,pNewObject*/,THREAD_PRIORITY_LOWEST);
  2. m_pTHreadHorloge->m_bAutoDelete=false;

Reply

Marsh Posté le 18-03-2005 à 13:36:42    

Code :
  1. CMyObject* pObject = reinterpret_cast<CMyObject*>(pParam);


 
[:aloy] non ?

Reply

Marsh Posté le 25-03-2005 à 11:48:26    

Joel F a écrit :

Code :
  1. CMyObject* pObject = reinterpret_cast<CMyObject*>(pParam);


 
[:aloy] non ?


 
ben j'en sais rien ma solution marche elle n'est peut etre pas parfaite mais ca marche donc voila :D

Reply

Marsh Posté le 25-03-2005 à 15:31:28    

Autre probleme est t il possible de recuperer en dehors du thread les variables nHeure , nMin nSec
 
Si oui comment la j'ai aucune idée :??:

Reply

Marsh Posté le 25-03-2005 à 19:02:53    

bon j'explique : ça ne marche pas, car une fonction membre de classe possède en 1er paramètre implicite le pointeur this. donc forcément, ça ne colle pas avec la signature.
la solution : faire de cette fonction une fonction static et point barre !


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed