100% CPU-Last



  • die hohe cpu auslastung ist ja nur auf seite 1. da wird sich der fehler ja wohl ziemlich schnell finden lassen.



  • ...und auf der letzten auch...!!?? 😕



  • Kann es sein, das er hier nicht mehr rauskommt??

    for(int nZaehler = 1; nZaehler < m_Seitennummern; nZaehler++)
    {
        m_tabellenSeite[nZaehler] -> SetWindowPos(&wndTop, nX, nY, nXz, nYz, SWP_HIDEWINDOW);
    }
    

    Ist die SetRec-Methode in der TabCtrl-Klasse.

    zwette



  • was du brauchst ist ein Profiler - mit dem man die Stellen findet, wo es sehr langsam wird.

    Wenn jemand einen für MSVC++ (.NET) kennt
    bitte mailen.



  • Meinst du sowas wie VTune von Intel?

    zwette

    PS: HAB EINEN! http://www.codework.com/glowcode/product.html



  • Die OnPaint-Funktion hat sich als Schuldiger herausgestellt, aber wie bekomme ich das so hin, das er nicht dauernd nur zeichnet? Anscheinend hab ich keine korrekte Verknüpfung zwischen WM_PAINT und OnPaint!? Sie zeichnet nämlich permanent neu...

    zwette



  • Darf ich nochmal raten? Du benutzt nicht CPaintDC in OnPaint, sondern GetDC() o.ä. CPaintDC ruft im Destruktor ValidateRect auf. Da dies bei dir nicht geschieht bleibt der Bereich invalidated (*g*) und es wird ständig neu gezeichnet. Also, entweder:

    void CMyWnd::OnPaint()
    {
      CPaintDC dc(this);
      ...
    }
    

    oder:

    void CMyWnd::OnPaint()
    {
      ...
      ValidateRect(0);
    }
    

    EDIT: (Habs mir in deinem Projekt angeguckt. Ist so wie ich vermutet habe. Nimm die OnPaint-Funktionen raus wenn du sie nicht brauchst oder schreib "CPaintDC dc(this);" rein.)



  • noch ein hinweis: wenn man in deinem programm ESCAPE drückt, geht der aktuelle dialog zu. das ist bestimmt nicht so gewollt.



  • 🙂 schrieb:

    noch ein hinweis: wenn man in deinem programm ESCAPE drückt, geht der aktuelle dialog zu. das ist bestimmt nicht so gewollt.

    Woher willst du das wissen? 😉



  • @MaSTaH:

    Hey, THX, es funktioniert, im Grunde hattest du Recht, da ich aber einigen Quellcode (aus Sicherheitsgründen) unterschlagen hatte, konntest Du es nicht auf den Punkt bringen.

    Ich hatte zuerst:

    void CResonator_Single::OnPaint(void)
    {
        if (m_pGraph->GetDrawn() == true) // stellt fest, ob schon ein Graph gezeichnet wurde
        {
            CPaintDC dc(this);
            m_pGraph->DrawChart(m_pFileGraphS12, m_hWndGraphArea, S12_DATA);
        }
    }
    

    es muss natürlich lauten:

    void CResonator_Single::OnPaint(void)
    {
        CPaintDC dc(this);
        if (m_pGraph->GetDrawn() == true) // stellt fest, ob schon ein Graph gezeichnet wurde
        {
            m_pGraph->DrawChart(m_pFileGraphS12, m_hWndGraphArea, S12_DATA);
        }
    }
    

    Nochmal ein dickes DANKE SCHÖN!

    @:)
    Wie kann ich denn das unterbinden? Gibts etwas ne ESC-Message? Ist nicht gewollt (@MaSTaH )...

    zwette



  • Es müsste so gehen:

    BOOL CMyDlg::PreTranslateMessage(MSG* pMsg) 
    {
      if(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_ESCAPE)
        return TRUE;
    
      return CDialog::PreTranslateMessage(pMsg);
    }
    

Anmelden zum Antworten