begin process at 2010 02 10 08:50:38
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Multi-Thread


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Multi-Thread

mercredi 16 mars 2005 à 20:36:21 | Multi-Thread

cjiwank

Quelqu'un peut-il me dire pourquoi je compile ce projet (VC++ 6) j'obtient tjs une erreur " error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned int (void *)'"


// Chap18bDoc.cpp : implementation of the CChap18bDoc class
//

#include "stdafx.h"
#include "Chap18b.h"
#include "Spinner.h"
#include "Chap18bDoc.h"
#include "Chap18bView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CChap18bDoc

IMPLEMENT_DYNCREATE(CChap18bDoc, CDocument)

BEGIN_MESSAGE_MAP(CChap18bDoc, CDocument)
 //{{AFX_MSG_MAP(CChap18bDoc)
  // NOTE - the ClassWizard will add and remove mapping macros here.
  //    DO NOT EDIT what you see in these blocks of generated code!
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CChap18bDoc construction/destruction

CChap18bDoc::CChap18bDoc()
{
 // TODO: add one-time construction code here

}

CChap18bDoc::~CChap18bDoc()
{
}

BOOL CChap18bDoc::OnNewDocument()
{
 if (!CDocument::OnNewDocument())
  return FALSE;

 // TODO: add reinitialization code here
 // (SDI documents will reuse this document)
 InitSpinners();
 return TRUE;
}

 

/////////////////////////////////////////////////////////////////////////////
// CChap18bDoc serialization

void CChap18bDoc::Serialize(CArchive& ar)
{
 if (ar.IsStoring())
 {
  // TODO: add storing code here
 }
 else
 {
  // TODO: add loading code here
 }
}

/////////////////////////////////////////////////////////////////////////////
// CChap18bDoc diagnostics

#ifdef _DEBUG
void CChap18bDoc::AssertValid() const
{
 CDocument::AssertValid();
}

void CChap18bDoc::Dump(CDumpContext& dc) const
{
 CDocument::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CChap18bDoc commands

void CChap18bDoc::CalcPoint(int nID, CSpinner *pSpin)
{
 RECT lWndRect;
 CPoint pPos;
 int iLength;
 CChap18bView *pWnd;

 pWnd = (CChap18bView*)pSpin->GetViewWnd();
 pWnd->GetClientRect(&lWndRect);
 iLength = lWndRect.right/6;
 switch (nID) {
  case 0 : pPos.x = (lWndRect.right/4) - iLength;
     pPos.y = (lWndRect.bottom/4) - iLength;
     break;
  case 1 : pPos.x = ((lWndRect.right/4) * 3) - iLength;
     pPos.y = (lWndRect.bottom/4) - iLength;
     break;
  case 2 : pPos.x = (lWndRect.right/4) - iLength;
     pPos.y = ((lWndRect.bottom/4) * 3) - (iLength * 1.25);
     break;
  case 3 : pPos.x = ((lWndRect.right/4) * 3) - iLength;
     pPos.y = ((lWndRect.bottom/4) * 3) - (iLength * 1.25);
     break;
 }
 pSpin->SetLength(iLength);
 pSpin->SetPoint(pPos);
}

void CChap18bDoc::InitSpinners()
{
 int i;

 POSITION pos = GetFirstViewPosition();
 if (pos != NULL) {
  CView* pView = GetNextView(pos);
  for (i=0; i<4; i++) {
   m_cSpin[i].SetViewWnd(pView);
   m_cSpin[i].SetContinue(NULL);
   switch(i) {
    case 1 : m_cSpin[i].SetContinue(&((CChap18bView*)pView)->m_bThread1);
       break;
    case 3 : m_cSpin[i].SetContinue(&((CChap18bView*)pView)->m_bThread2);
       break;
   }
   CalcPoint(i, &m_cSpin[i]);
  }
 }
}

void CChap18bDoc::DoSpin(int nIndex)
{
 m_cSpin[nIndex].Draw();
}

UINT CChap18bDoc::ThreadFunc(LPVOID pParam)
{
 CSpinner* lpSpin = (CSpinner*)pParam;
 BOOL* pbContinue = lpSpin->GetContinue();
 while (*pbContinue)
  lpSpin->Draw();
 return 0;
}

void CChap18bDoc::SuspendSpinner(int nIndex, BOOL bSuspend)
{
 if (!bSuspend) {
  if (m_pSpinThread[nIndex]) {
   HANDLE hThread = m_pSpinThread[nIndex]->m_hThread;
   ::WaitForSingleObject(hThread, INFINITE);
  }
 }
 else {
  int iSpnr;
  switch (nIndex) {
   case 0 : iSpnr = 1;
      break;
   case 1 : iSpnr = 3;
      break;
  }
 m_pSpinThread[nIndex] = AfxBeginThread(ThreadFunc,(LPVOID)&m_cSpin[iSpnr]);
 }
}

mercredi 16 mars 2005 à 23:27:52 | Re : Multi-Thread

jul39dole

et en castant en LPVOID aussi ?
jeudi 17 mars 2005 à 09:02:21 | Re : Multi-Thread

ymca2003

Réponse acceptée !
ThreadFunc doit être un membre static de la class avec la convention d'appel WINAPI.
Si cette fonction doit faire appel à des membres de la classe, il fuat lui passer un pointeur sur l'objet (this en l'occurence) comme param :

.cpp :
UINT WINAPI CChap18bDoc::ThreadFunc(LPVOID pParam)

.h :
class CChap18bDoc
{
static UINT WINAPI ThreadFunc(LPVOID pParam);
};
jeudi 17 mars 2005 à 09:19:12 | Re : Multi-Thread

cjiwank

Merci pour les info.  Maintenant cela fonctionne correctement.
Comme quoi parfois il suffit de vraiment peut de chôse.


Cette discussion est classée dans : case, cchap18bdoc, lwndrect, ilength, ppos


Répondre à ce message

Sujets en rapport avec ce message

randomize [ par niconico ] salut à tous, je débute en C++ et j'utilise VC++ pour compiler mes prog :le prob :avec ce petit programe (plus bas)il me sort 2 erreurs :error C2065: Qui veut gagné 50Frs!!!!!!!!!!!!!! [ par Akil ] Bonjour à tousJe cherche quelqu'un qui sait bien programmer en langage C++ et Vb.J'ai un projet d'éditeur de texte Farsi (Righttoleft)en C++ et je vou faire progresser....une progress bar !! [ par Xs ] c tout bete, mais je sais pas comment faire. ou plutot lui dire a quoi comparer sa progression par rapport au chargement de quelque chose.mon code : # objet non initialisé (API Win32) [ par Xs ] salut !voici mon code, d'abord :#include #include #include "resource.h"LRESULT CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam){cha positions [ par Xs ] salut ! je cherche et je trouve pas, ou alors je sais pas m'en servir, comment on recupere la position actuelle du fenetre(dialogbox).j'ai essayé des touches [ par Xs ] voila, j'ai essayé de tester des touches afin que, par exemple, lorsque l'on appuie sur Y, une message box apparaisse.j'ai recupérer ce code venat de erreur memoire [ par Xs ] alors voila, j'ai jamais vu ca.je lance mon programme. normal. puis je clique sur le bouton generer et là, pouf !un message d'erreur. alors, celui la, pu#!@'{&=!:; de memoire !!! [ par Xs ] salut.voila, presque chacun de mes prog, j'obtiens une erreur memoire du type "l'adresse "0x0001834F" ne peut etre "read"/"written"........."c 'est t switch....case [ par cabarrus ] salut !!je veux un programme qui demande l'âge, puis qui affiche un message selon l'âge frappé en utilisant switch...case.voici mon programme mais j'a pb avec un labyrinthe [ par skinia ] je suis sur un projet de labyrinthe et j'ai bloqué pour l' algorithme du plus court chemin (entre un pt qq du labyrinthe et la cible au milieu).le lab


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,265 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales