begin process at 2012 05 28 05:16:55
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

MFC

 > 

Adaptation d'une fonction en vue de retourner deux v


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

Adaptation d'une fonction en vue de retourner deux v

mercredi 11 octobre 2006 à 05:34:29 | Adaptation d'une fonction en vue de retourner deux v

develdelphi





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


mercredi 11 octobre 2006 à 10:11:47 | Re : Adaptation d'une fonction en vue de retourner deux v

buno

Administrateur CodeS-SourceS
Whaoo!
J'ai décroché un peu...
Si tu veux retourner plusieurs valeurs à l'issues d'un fonction, utilises les référence:
void isProblemHardware(int &iCam1, int &iCam2)
{
  ...
  iCam1=0;
  ...
  iCam2=1;
}

Lors de l'appel:
int iCam1=0;
int iCam2=0;
isProblemHardware(iCam1, iCam2);
// ici, iCam1 vaut 0 et iCam2 vaut 1

Ai-je répondu à ta question?

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
mercredi 11 octobre 2006 à 12:47:20 | Re : Adaptation d'une fonction en vue de retourner deux v

develdelphi


Merci Buno,

oui le code est lourd :)
ça repond très bien à ma question.

Merci



Cette discussion est classée dans : fonction, strdatalist, inithardwarestatus, pthreadhardware1, pthreadhardware2


Répondre à ce message

Sujets en rapport avec ce message

Par défaut Fonction de conversion d'un type specifique vers un int en retour de fonction [ par develdelphi ] Bonjour, Voici mon problème; en fait j'ai un grand programme relatif a un système de detections.Ce programme a plusieurs threads qui tournent ensemble converion d'un type specifique vers un entier lors du retour d'une fonction [ par develdelphi ] Bonjour, Voila comme le titre le dit bien, je veux convertir un type donne ( FSRetval ) vers un type ( int ) lors du retour vers la fonction. Voici l transfere de pointeur [ par stefbuet ] salut, j'ai créé un pointeur dans une fonction, comment je peux faire pour pouvoir le réutiliser dans une autre fonction, ou mieux l'utiliser partous Erreurs de compilation pour passage de valeurs par une struct [ par develdelphi ] Bonjour, Voila apres un moment je reviens cette fois avec plus d'explications sur un code pour passer des valeurs.Donc, j'ai un programme de gestion d fonction de hashage hash_map [ par Sk8yo ] bonjour,voila mon probleme :j'ai une structure hash_map (STL) pour laquelle j'ai besoin de créer une fonction de hashage perso.J'ai cherché un peu par probleme fonction prenant un std::istringstream [ par gg_the_boss ] tout est ici (le code, les messages d'erreurs, les explications): http://www.rafb.net/paste/results/JKU81J25.htmlmerci d'avance pour vos reponses :D Graphique f(x)=x^p [ par dustez ] On me demande de réaliser un programme affichant sous forme textuelle des graphiques représentant les fonction du type f(x)=x^p, à partir des paramètr Conditions répétitif - debuggeur [ par juki_webmaster ] Salut, Pour achever le developpement de mon logiciel j'ai eu l'idée de concevoir un debuggeur maison et de l'intégré par la suite en "dur" dans les s qsort fonctionnement? [ par deck_bsd ] Bonjour a tous,Voila, je voudrai trier ce tableau :char nt[][100] = {"un","trois","quatre","cinq","a","bb","b","axxxxxxxxxxxxxxxxxxx"};Avec la fonctio c++ [ par aminegenie ] je veux une fonction dans le c++ qui me permet d'entrer une variable ou un caractere ou elle me lit le bouton en cours de la lecture de c++ une autre


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
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,780 sec (4)

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