savate83
Messages postés2Date d'inscriptionmercredi 12 mai 2004StatutMembreDernière intervention13 mai 2004
-
12 mai 2004 à 16:46
savate83
Messages postés2Date d'inscriptionmercredi 12 mai 2004StatutMembreDernière intervention13 mai 2004
-
13 mai 2004 à 14:06
Bonjour a tous,
mon probleme est le suivant : je dois realiser une classe qui me permette d'executer un thread de reception a chaque instance car g plusieurs port
j'ai une erreur a la compilation du genre :
D:\_stage_2004\test-rs3\rs3\rs3.cpp(64) : error C2664: 'CreateThread' : cannot convert parameter 3 from 'unsigned long (void *)' to 'unsigned long (__cdecl *)(void *)'
None of the functions with this name in scope match the target type
et le .cpp
// rs3.cpp: implementation of the rs3 class.
//
//////////////////////////////////////////////////////////////////////
if (hComPort != INVALID_HANDLE_VALUE)
{
//On configure le port serie, d'abord on accede a son etat courant
GetCommState(hComPort,&dcb) ;
//puis on modifie les champs que l'on veut initialiser
dcb.BaudRate = CBR_9600 ; //vitesse de communication
dcb.fParity = FALSE ; //validation (ou non) du controle de parite
dcb.fDtrControl=DTR_CONTROL_DISABLE ; //pas de controle de flux materiel
dcb.fOutX=FALSE ; //pas de controle de flux logiciel en sortie
dcb.fInX=FALSE; //pas de controle de flux logiciel en entree
dcb.fNull=FALSE ; //on conserve les char NULL reçus
dcb.ByteSize=8; //largeur des donnees
dcb.Parity=NOPARITY; //type de parite associee aux donnees
dcb.StopBits=ONESTOPBIT; //nb de bits de stop
//puis on initialise le port
SetCommState(hComPort,&dcb) ;
//On fixe maintenant les differentes valeurs des timeouts
/*Timeouts infinis
cto.ReadIntervalTimeout=0;
cto.ReadTotalTimeoutConstant=0 ;
cto.ReadTotalTimeoutMultiplier=0;
cto.WriteTotalTimeoutConstant=0;
cto.WriteTotalTimeoutMultiplier=0;
SetCommTimeouts(hLocal,&cto) ;
//DEBUG
wsprintf(szBuffer,TEXT("Port serie COM1 ouvert et initialise\r\n")) ;
SetWindowText(hTB3,szBuffer); */
printf("Port serie ouvert\n");
//On retourne le handle du port ouvert
// start read thread if not already started
//=============erreur signalée par le compilo=========================================
if(!GetExitCodeThread (hReadThread, &dwTStat) || (dwTStat != STILL_ACTIVE) ){
hReadThread = CreateThread(NULL, 0, readThread, hWnd, 0, &dwTStat);
if(hReadThread)
CloseHandle(hReadThread);
}
return true ;
}
else
{
//DEBUG
// wsprintf(szBuffer,TEXT("Erreur d'ouverture de COM1\r\n")) ;
// SetWindowText(hTB3,szBuffer);
printf("Port serie non ouvert\n");
//On retourne le handle d'erreur
return false ;
}
}
//------------ Fonction du thread de lecture----------------------------------
DWORD WINAPI rs3::readThread (PVOID pArg){
// variables
if(hComPort!=NULL)
{
// pas d'erreur
// g_ErrCom=e_ErrCom_None;
//Emission du buffer
if(WriteFile(hComPort,txt,strlen(txt),&NumBytes,NULL)==0)
{
//Erreur lors de l'émission
return false;
}
return true;
}
else
//Le port n'a pas été ouvert
return false;
}
//--------------- purger -------------------------------------------------
void rs3::purger(){
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 12 mai 2004 à 18:46
readThread doit être static dans la classe. Tu peut passer un pinteur sur l'objet associer dans createThread (this an param 4) que tu récupère en tant que LPVOID dans la fct du thread (à caster en pointeur sur la classe)