Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Problem mit OnIdle

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
15.12.2004, 08:42 Uhr
~der jonny
Gast


Also ich steh grad voll aufm Schlauch.
Folgendes: Habe eine SDI-Anwendung erstellt mit der ich Daten seriell einlese und auswerte.
Im Menü habe ich einen Punkt Connection wo ich mit den Unterpunkten "Connect" und "Disconnect" die Verbindung zum Port herstellen kann und beenden kann und gegeneinander verriegelt sind.
In meiner Toolbar habe ich zwei Felder die das gleiche machen wie die Menüpunkte deshalb haben sie auch jeweils die gleiche ID.
Mit der Funktion OnIdle hatte ich erst vor die Hauptoberfläche zu aktualisieren mit UpdateData(FALSE):

C++:
nBOOL CPB_ToolApp::OnIdle(LONG lCount)
{
    CWinApp::OnIdle(lCount);
    
    POSITION pos = GetFirstDocTemplatePosition();
    CDocTemplate* pDocTemplate = GetNextDocTemplate(pos);
  
    pos = pDocTemplate->GetFirstDocPosition();
    CDocument* pDoc = pDocTemplate->GetNextDoc(pos);
    pos = pDoc->GetFirstViewPosition();
    CPB_ToolView* pView = (CPB_ToolView*) pDoc->GetNextView(pos);
    pView->UpdateData(FALSE);
             return TRUE;
}


Da das aber später zu viel Rechenzeit gekostet hat habe ich die Funktion wieder rausgenommen.
Das komische ist das nachdem ich sie rausgenommen habe kann ich die Daten vom Com-Port nicht mehr korrekt einlesen. Jetzt werdet ihr sagen dann laß sie doch drin. Hab ich dann auch gemacht.... und zwar so:


C++:
nBOOL CPB_ToolApp::OnIdle(LONG lCount)
{
    //CWinApp::OnIdle(lCount);
    return TRUE;
}

Jetzt kann ich die Daten wieder korrekt einlesen nur habe ich jetzt ein anderes Problem:
Die Verriegelung der Menüpunkte "Connect" und "Disconnect" funktioniert noch , aber die Verriegelung der Buttons in der Toolbar "Connect" und "Disconnect" funktioniert nicht mehr. Wenn ich CWinApp::OnIdle(lCount); wieder aktiviere geht das mit der Toolbar wieder aber ich kann die Daten über einen längeren Zeitraum nur mit Felhern einlesen.


Meine Frage:

Mal die Datenübertragung außen vor gelassen was haben die Buttons in der Toolbar mit dem Befehl :CWinApp::OnIdle(lCount); der Funktion OnIdel zu tun und wie kann ich es erreichen das die Verriegelung der Toolbar wieder geht ohne diesen Befehl einzubinden....


Ich weiß das ist vielleicht nur schwer nachzuvollziehen. Wenn was unklar ist sagt mir bescheid. Ich bastel an dem Programm schon so lange rum das mir das vielleicht nicht auffällt..

Gruß
der jonny
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
15.12.2004, 19:59 Uhr
Spacelord
Hoffnungsloser Fall



Zitat von ~der jonny:
Meine Frage:

Mal die Datenübertragung außen vor gelassen was haben die Buttons in der Toolbar mit dem Befehl :CWinApp::OnIdle(lCount); der Funktion OnIdel zu tun und wie kann ich es erreichen das die Verriegelung der Toolbar wieder geht ohne diesen Befehl einzubinden....





OnIdle ist fester Bestandteil der MFC Nachrichten-schleife/weiterleitung(OnIdle versendet WM_IDLEUPDATECMDUI). Ausserdem erledigt OnIdle auch interne Aufräumarbeiten und löscht die temporären Objekte die angelegt werden(das sind die wenn in der MSDN Doku steht "The returned pointer may be temporary and should not be stored for later use.").
Also wenn du OnIdle überschrieben hast musst du auch die "Standardimplementierung" von CWinApp::OnIdle aufrufen sonst wirst du mit deiner Anwendung nicht viel Freude haben.

Da wirst du wohl schauen müssen welchen Einfluss OnIdle auf deine Datenübertragung hat.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: