Bonjour,
Je voudrais afficher dans une List Box, les problèmes rencontrés lors de l'initialisations
de caméras (Hardware). Au depart ma fonction affichait les problemes lies a une des deux cameras a chaques fois par contre maintenant je devrais instancier, initialiser les deux cameras en meme temps (la fonction d'instanciation est
"Process(unsigned int uiProcess)") et donc afficher les erreurs des deux cameras sur ma list box (la fonction d'affichage est "
OnTimer(UINT nIDEvent)").
Et enfin la fonction principale (
"isProblemeHardware()") qui doit etre adapter envoi le numero des erreurs rencontres pour l'une et/ou l'autre camera a la fonction d'affichage.
Remarque sur le prorgamme:Mon programmme travaille en Multithreads et j'ai beaucoup de classes.
En effet j'ai dans ma fonction 'isProblemHardware()' qui est apellée par la
variable ''initHardwarestatus' de la fonction 'Ontimer(UINT nIDEvent)'
un retour d'un entier. Ce entier retourné est évaluée dans la fonction appellante 'Ontimer(UINT nIDEvent)' par un switch puis en fonction des différents case: je fais un Addstring sur ma liste box.Je pense qu'il faut chaques instances des caméras dans leurs variables 'm_initHardwarestatus'.
Problemes rencontres:La fonction tel que je l'ai fait marche mais n'est pas très professionnelle
car elle renvoit les erreurs d'init que l'une des cameras ( celle qui se serait initialisée la
première) comment puis-je savoir lors de l'appel de cette fonction quelle instanciation donner
à la fonction appellante et comme il y en aura deux comment faire?
-Codes:
On peut dire que les codes se divisent en 2 parties : - INITIALISATIONS HARDWARES
- AFFICHAGES DES PROBLEMES D'INIT HARDWARE
Les principales instances et variable : - m_initHardwarestatus
- m_pThreadHardware1
- m_pThreadHardware2
-----------------------------------------------
-----------------------------------------------
INITIALISATIONS HARDWARE
-----------------------------------------------
int CMy99090Doc::Process(unsigned int uiProcess)
{
try
{
CString cstrFichier=m_Init.Get_Params_ACDAS_File();
if(cstrFichier.Compare ("")==0)
return 1;
switch (uiProcess)
{
case PROCESS_DIVERS_ACQUISITION: // autre process
......... (codes inutiles)
case PROCESS_SYS_AUTOMATIQUE: // notre process
if(m_Init.Get_Params_SYS_Config_Securiy() & LEVEL_4) // securité et niveau dans lequel on travaille
{
m_pThreadHardware1= new CThreadHardware(0); // Thread initalisation de la caméra 1
TRACE("Début tache BestCam principale1\n");
m_pThreadHardware1->CreateThread(NULL,0);
if(m_Init.Get_Params_SYS_Config_Securiy() & LEVEL_BI)
{
Sleep(10000);
m_pThreadHardware2= new CThreadHardware(1);
TRACE("Début tache BestCam principale2\n");
m_pThreadHardware2->CreateThread(NULL,0);
}
}
if(m_pThreadDispatcher) // Thread qui dispatche les autres Threads
{
m_pThreadDispatcher->Thread_Stop();
delete m_pThreadDispatcher;
TRACE("fin tache Dispatcher case ACDASSYSautom\n");//4
m_pThreadDispatcher=0;
}
m_pThreadDispatcher= new CThreadDispatcher
( m_Init.Get_Params_ACDAS_File(),
this,
m_pThreadWago1, // pour la comminication avec differents peripheriques
m_pThreadWago2,
m_pThreadHardware1, // camera 1
m_pThreadHardware2, // camera 2
THREAD_ACQUISITION | THREAD_TRAITEMENT
| THREAD_AUTOMATIQUE
);
---------------------------------------------------------------------------
---------------------------------------------------------------------------
AFFICHAGES DES PROBLEMES D'INIT HARDWARE
---------------------------------------------------------------------------
---------------------------------------------------------------------------
void CViewSYSInitialisation::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
unsigned int uiSecurity;
CString strDatalist; // pour afficher dans la list box
uiSecurity=m_Init.Get_Params_SYS_Config_Securiy();
..............................................................
if(m_Init.Get_Params_General_ModeProcess ()==PROCESS_SYS_AUTOMATIQUE)
{
if(uiSecurity& LEVEL_1)
{
int initHardwarestatus=pDoc->isProblemeHardware();
if(initHardwarestatus)
m_ListeHardware.ResetContent ();
else
m_bPblHardware=false;
switch(initHardwarestatus)
{
case 1:
m_bPblHardware=true;
strDatalist.Format ("SetConfigFilePath Hardware 1 failed \n");
m_ListeHardware.AddString (strDatalist);
break;
case 2:
m_bPblHardware=true;
strDatalist.Format ("SetConfigFilePath Hardware 2 failed %d");
m_ListeHardware.AddString (strDatalist);
break;
case 3:
m_bPblHardware=true;
strDatalist.Format ("Initialize Hardware 1 NOK");
m_ListeHardware.AddString (strDatalist);
strDatalist.Format ("Explication Hardware 1 %d", FSRetVal_Names[tmp]);
m_ListeHardware.AddString (strDatalist);
break;
case 4:
m_bPblHardware=true;
strDatalist.Format ("Initialize Hardware 2 NOK");
m_ListeHardware.AddString (strDatalist);
strDatalist.Format ("Explication Hardware 2 %d", FSRetVal_Names[tmp]);
m_ListeHardware.AddString (strDatalist);
break;
}// switch()
if(pDoc->isIniteHardware())
m_bHardware=true;
else
m_bHardware=false;
}
else
{
m_bPblHardware=false;
m_bHardware=true;
}
...........................
CFormView::OnTimer(nIDEvent);
}
---------------------------------------------------------------------------
---------------------------------------------------------------------------
FONCTION PRINCIPALE
---------------------------------------------------------------------------
int CMy99090Doc::isProblemeHardware() /////pour voir les cameras qui font defauts.
{
/* // code de depart
int ireturn=0;
m_pThreadHardware2->m_initHardwarestatus;
if(m_pThreadHardware1==0 && m_pThreadHardware2==0 )
return 0;
if(m_pThreadHardware1==0 || m_pThreadHardware2==0 )
if (m_pThreadHardware1==0)
{if (m_pThreadHardware2->isProbleme())
ireturn =m_pThreadHardware2->m_initHardwarestatus;
}
else
if (m_pThreadHardware1->isProbleme())
ireturn =m_pThreadHardware1->m_initHardwarestatus;
return ireturn;
*/
//code actuel affiche erreur d'une seul camera
/*
m_initHardwarestatus pour avoir le numero de l'erreur, deja defini grace a une autre fonction ( int CHardware::Init())
*/
int ireturn=0;
if(m_pThreadHardware1->m_initHardwarestatus==0 && m_pThreadHardware2->m_initHardwarestatus==0)
return 0;
if (m_pThreadHardware1->m_initHardwarestatus!=0 || m_pThreadHardware2->m_initHardwarestatus!=0)
//if (m_pThreadHardware1->m_initHardwarestatus!=0)
//if(m_bfront==0)
//if(CHardware::m_pHardware->m_bver==0) // ici j'ai des erreurs m_bver non connu alors que je met la classe devant ?
if (m_pThreadHardware1->isProbleme())
ireturn= m_pThreadHardware1->m_initHardwarestatus ;
if (m_pThreadHardware2->isProbleme())
ireturn= m_pThreadHardware2->m_initHardwarestatus ;
// m_pThreadHardware1->m_initHardwarestatus;
// else
// m_pThreadHardware2->m_initHardwarestatus;
return ireturn;
}
Comme vous pouvez le voir je ne peu initialiser en même temps les deux Hardware ensemble car la fonction isProblemeHardware()
ne renvoit qu'un seul entier.
Pourrais-je eventuellement passer un argument à la fonction et si oui quel type d'argument et comment ?
pourrais-je utiliser un this et comment?
Merci de m'aider