IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Threads & Processus C++ Discussion :

Temps réel et MFC Visual


Sujet :

Threads & Processus C++

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 5
    Par défaut Temps réel et MFC Visual
    Bonjour,

    je suis débutante en C++ et je travaille actuellement sur un projet en MFC Visual sous Windows.

    Je bosse sur un programme qui doit récupérer des données spécifiques et entrantes sur un fichier texte se renouvelant chaque secondes, et les afficher sur un graph en temps réel.

    J'essaie d'adapter a mon cas un petit prog. trouvé sur internet : http://www.codeguru.com/cpp/misc/misc/article.php/c373/

    J'arrive a faire fonctionner le tout, seulement un délais d'environ 5 secondes subsiste puisque je n'arrive pas a synchroniser la lecture du fichier avec l'entrée des données...Dans le programme que jai trouvé, il n'y a pas de thread ou fonction prévue a l'entrée de données extérieures..les données sont générées par un random mis dans le on-timer. J'ai placé aussi mon code d'extraction des données dans le on timer, effectuant ainsi la lecture des données du fichier chaque secondes...évidemment ceci ne permet pas le temps réel!!!

    Pour ce faire, j'aimerais implanter un thread qui effectuerait la lecture et l'extraction des données a partir d'une fonction ReadDirectoryChangesW (avec un FILE_NOTIFY_CHANGE_SIZE ??) , c'est a dire que si la taille du fichier change, il y aurait lecture et extraction des données voulues( s'il y a) et envoit vers la list des données a afficher.. Et en parrallele jaimerais que le Ontimer active seulement laffichage des données contenu dans la list a chaque secondes...SEULEMENT, je n'ais jamais fait de threads et je ne sais pas comment et ou implanter un thread dans MFC ?

    Est-ce que ce que je veux faire est réalisable ? Est-ce que sa nécessite absolument l'implantation d'un thread ? Comment faire tout sa ???

    Merci, votre aide est très apprécié !!

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Un thread qui surveille le fichier me parait une bonne idée.

    Lorsque ce thread détecte un changement dans la taille du fichier, il lit les données et envoie le résultat du traitement à la fenêtre IHM par un message (SendMessage ou PostMessage).
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 5
    Par défaut
    étant débutante, comment on fait tout sa en MFC ? Cela peut probablement paraître con, mais je ne sais pas ou mettre le thread!! est-ce que ce je met ce code dans le prog MFC principal CDemo ou dans une fonction de Clplot ?:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void CMyClass::threading()
    {
       Code de traitement du fichier texte:
       ReadDirectoryChangesW..
    }

    Auriez-vous des exemples de code avec ReadDirectoryChangesW
    déja implanté dans un programme similaire ?

    Merci!

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 5
    Par défaut
    Afin que tout ceci soit plus clair, voici les fonctions Ontimer et On initialUpdate du prog. que jai modifié pour traiter et afficher mes données:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    void CDemoView::OnInitialUpdate() 
    {
        CView::OnInitialUpdate();
                  CRect Rect;
    	GetClientRect(Rect);
    	m_Plot.Create(WS_CHILD|WS_VISIBLE,Rect,this,12000);
     
    	m_Plot.SetSerie(0, PS_SOLID, RGB(255,0,0), 0.0, 130.0, "TOCO");
     
    	m_Plot.SetLegend(0, PS_SOLID, RGB(255,0,0), "TOCO");
     
        //Détermine la position du premier length 13 dans le fichier de données (Portmon.Log), afin de débuter la lecture a la donnée écrite  la plus récente
    {
       ifstream file ("Portmon.log");
       while ( getline( file, ligne ) )
       {
     
    	 string::size_type loc = ligne.find( " Length 13:", 0 );
    	if( loc != string::npos ) //Si on trouve un lenght 13
    		{
    		depart=file.tellg();
    		}
        }
       file.close();
     
    }
     
    	m_Plot.m_bAutoScrollX=TRUE;
     
    	SetTimer(1,1000,NULL);
    	canSize=TRUE;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    void CDemoView::OnTimer(UINT nIDEvent) 
    {
    	static BOOL pros={FALSE};
    	if(!pros){
    		pros=TRUE;
    		{
    		ifstream file2("Portmon.LOG");
            file2.seekg((depart),ios::beg);//
    			while ( getline(file2, ligne1) )
    			{
    				string::size_type loc1 = ligne1.find( "Length 13:", 0 );
    				if( loc1!=string::npos )//Si cette ligne contient un length 13 				{   
    					contractions_hex = ligne1.substr (loc1+14,2);
    					valeur_cardio_connecte = ligne1.substr(loc1+26,2);
    					std::istringstream iss (contractions_hex); //Conversion de la valeur en hexadecimal en entier
    					iss >> std::hex >> num;
    					double y1 =(double)(num/2);
    					m_Plot.AddPoint(0,  CTime::GetCurrentTime(), y1);
    					break;
    				}
    			}

Discussions similaires

  1. Visual Studio Express 2010 ou 2012 + Graphique Temps Réels
    Par Jolt0x dans le forum Windows Forms
    Réponses: 11
    Dernier message: 01/08/2013, 12h37
  2. MFC - affichage de données en temps réel
    Par limprid dans le forum MFC
    Réponses: 2
    Dernier message: 13/06/2012, 20h04
  3. [MFC] graphique temps réel
    Par _Thomas_ dans le forum MFC
    Réponses: 10
    Dernier message: 01/06/2004, 11h56
  4. Durée d'un traitement temps réel
    Par Almex dans le forum C
    Réponses: 5
    Dernier message: 29/03/2003, 14h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo