Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Not Responding

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
20.07.2004, 10:25 Uhr
~Schwabi
Gast


Hey ho,
habe bei mir eine Fortschrittsanzeige integriert. Die sich alle 100 ms aktualisiert.
Bis schliesslich 20 Sekunden erreicht sind.
Nun hab ich folgendes Problem:
Wenn das Programm gestartet wird und das erste mal der Fortschrittsbalken aktualisiert wird, kommt nach etwa 5-10 sekunden "Not Responding" bis die 20 sekunden erreicht sind.
Dann ist der Fortschrittsbalken nicht zu ende gelaufen und waehrend "Not Responding" findet keine Aktualisierung statt, logisch.
Beim zweiten mal allerdings läuft es ganz normal.
Warum das???
Seltsamerweise tritt dieses Problem immer nach Programmstart auf und auch immer zur gleichen Zeit.
I don't understand.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.07.2004, 15:39 Uhr
~toxic
Gast


hi, hast du dafür einen eigenen thread laufen ? oder machst das mit'm timer ? zeig doch mal etwas code...
--
grusz
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
20.07.2004, 15:52 Uhr
~Schwabi
Gast


Ho, das wird viel. Aber ich versuchs zu kuerzen.
Wird uebrigens nicht in einem Timer verwendet.

Code:
        for(int j=0; j<6; j++)
        {
            pWnd_channel = (CButton*)GetDlgItem(channel[j]);

            if(pWnd_channel->GetSafeHwnd())
            {
                if ( ((CButton*)GetDlgItem(channel[j]))->GetCheck() == 1)
                {
                        if(Conf->standard[0]  != Conf->m_Pb1) {x = x + 4;}
                                       ..............................
                                                .............................
                                      
                        if(Conf->standard[22] != Conf->m_YSt) {x = x + 4;}
                }
            }
        }


        m_progress.SetRange(0, x);
        m_progress.SetPos(0);
        x = 0;

        for(int i=0; i<6; i++)
        {
            pWnd_channel = (CButton*)GetDlgItem(channel[i]);

            if(pWnd_channel->GetSafeHwnd())
            {
                

                if ( ((CButton*)GetDlgItem(channel[i]))->GetCheck() == 1)
                {
                        
                        if(Conf->standard[0]  != Conf->m_Pb1)
                        {
                            //CODE
                            Sleep(100);
                            x++;
                            m_progress.SetPos(x);
                            //CODE
                            Sleep(100);
                            x++;
                            m_progress.SetPos(x);
                            //CODE
                            Sleep(100);
                            x++;
                            m_progress.SetPos(x);
                            //CODE
                            Sleep(100);
                            x++;
                            m_progress.SetPos(x);

                        }

                                                ..........................
                                                ..........................
                                                ..........................
                                                if(Conf->standard[22]  != Conf->m_Pb1)
                        {
                            //CODE
                            Sleep(100);
                            x++;
                            m_progress.SetPos(x);
                            //CODE
                            Sleep(100);
                            x++;
                            m_progress.SetPos(x);
                            //CODE
                            Sleep(100);
                            x++;
                            m_progress.SetPos(x);
                            //CODE
                            Sleep(100);
                            x++;
                            m_progress.SetPos(x);

                        }







Haja, ich beschreib den mal noch etwas.
Erst ma wird ueberprueft ob ein Kanal gewaehlt wurde oder nicht (die muessen Parametriert werden).
Schliesslich kann man je Kanal unterschiedlich viele Parameter einstellen und uebertragen, das uebertragen dauert natuerlich etwas, deswegen die Funktion "SLEEP". Das ganze beruht auf einem Master Slave Prinzip.
Nun will ich aber auswerten wieviele Parameter auf welchem Kanal geaendert werden um die Wartezeit zu ermitteln.
Diese Wartezeit wird schliesslich in den Fortschrittsbalken uebertragen und wird
bei jedem uebertragenen Befehl aktualisiert (um die Zykluszeit).
Haja, alles nich ganz so einfach.
Ich hoffe es is etwas zu verstehen, ich brauechte auf jeden fall eine Loesung fuer das Problem.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
20.07.2004, 16:09 Uhr
~toxic
Gast


also, es liegt immer etwas code zwischen den

C++:
Sleep(100);
x++;
m_progress.SetPos(x);

das würd ich mit SetStep machen also

C++:
m_progress.SetStep(max/anzahl_der_aktualisierungen);

und dann nur noch:

C++:
m_progress.StepIt();

dann brauchst die x nicht als hilfsvariable
warum aber dein dialog "hängt" keine ahnung... geht aus dem code nicht hervor
--
grusz
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
20.07.2004, 16:26 Uhr
~toxic
Gast


was für parameter werden denn übertragen ? und wohin ?
ich denke mal das passiert...

C++:
//CODE    // <-- ...an dieser Stelle ?! oder ?
Sleep(100);
x++;
m_progress.SetPos(x);

aber ohne "CODE" kann ich da nichts sagen
--
grusz
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
21.07.2004, 09:23 Uhr
~Schwabi
Gast


Erst mal danke fuer die Antwort.
Werde nachher mal das mit dem "StepStep" probieren.

Hier mal etwas mehr Code:


Code:

                        if(Conf->standard[0]  != Conf->m_Pb1)
                        {
                            Configuration.byte = 0;
                            Daten.byte = (int) (Conf->m_Pb1 * 10 + 0.5);
                            Configuration.byte = (i+1)<<8;
                            Configuration.byte = Configuration.byte + 120;
                            Configuration.bits.b13 = 1;
                            Configuration.bits.b14 = 1;
                            Controler->Tempregler32Bit_16_Bit_OUT0 = Configuration.byte;
                            Controler->Tempregler32Bit_16_Bit_OUT1 = Daten.byte;
                            Controler->PD_Out();
                            Sleep(100);
                            x++;
                            m_progress.SetPos(x);
                            Controler->PD_In();
                            Sleep(100);
                            x++;
                            m_progress.SetPos(x);
                            Configuration.bits.b14 = 0;
                            Controler->Tempregler32Bit_16_Bit_OUT0 = Configuration.byte;
                            Controler->PD_Out();
                            Sleep(100);
                            x++;
                            m_progress.SetPos(x);
                            Controler->PD_In();
                            Sleep(100);
                            x++;
                            m_progress.SetPos(x);

                        }





Das ist jetzt im Prinzip der Code um einen Parameter zu bearbeiten.
Im Byte "Configuration" wird der Parameterindex des Parameters uebergeben, ein Toggle Bit (b14), der Kanal und schliesslich ein Bit was sagt schreiben oder lesen.
Im Byte "Daten" wird der Parameterwert reingeschreiben.
Es handelt sich dabei um 2 * 16 Bit Woerter.

P.S.:
Ich mache zur Zeit ein Praktikum und da muss ich mich mit dem Interbus beschaeftigen (ein Industrie Bussystem).

Gruesse Schwabi
 
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: