Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » alternative zu Sleep()

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
05.05.2004, 11:20 Uhr
~spaxx
Gast


hi Leute,

wollte mal fragen, ob jemand eine alternative zu der Sleep() Funktion kennt. Denn ich benutze Sleep() in einer Schleife. In dieser wird aber auch ein Ladebalken hoch gesetzt. Das macht er aber wegen dem Sleep() nicht mehr. Das Sleep() brauche ich, weil ich zu einem anderen Server mappe. Und da muss etwas zeit abgewartet werden, bis die Verbindung steht.

MFG SPAXX
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.05.2004, 11:43 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


ruf mal nach jedem mal "Ladebalken" hochsetzen in der Schleife UpdateWindow() auf..
das sollte dein Problem lösen
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.05.2004, 11:47 Uhr
~spaxx
Gast


geht auch nicht. Ich habs auch schon mit UpdateData() probiert. Hat aber keine Auswirkung. Ich vermute das das Sleep() das negativ beeinflusst. Weil ohne das Sleep() geht es. Aber weglassen kann ichs nicht, weil sonst das Programm eingeschränkt in seiner Funktion wäre.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
05.05.2004, 11:55 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


hmm schon eigentartig
poste mal ein bisschen code dazu vielleicht hat dann ja noch einer ne idee aber das es am sleep alleine liegt halte ich für zumindest fraglich

wenn ich mir ein dialog mit nem button unn nem progressbar bastel funzt folgendes bei mir wunderbar

C++:
void CTralalaDlg::OnButton1(){

    GetDlgItem(IDC_BUTTON1)->EnableWindow(false);
    ((CProgressCtrl*)GetDlgItem(IDC_PROGRESS1))->SetPos(0);

    for(int i=1;i<=100;++i){
        ((CProgressCtrl*)GetDlgItem(IDC_PROGRESS1))->SetPos(i);
        UpdateWindow();
        Sleep(100);
    }

    GetDlgItem(IDC_BUTTON1)->EnableWindow(true);
    
    
}

--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
05.05.2004, 12:13 Uhr
RHBaum




Zitat:
Und da muss etwas zeit abgewartet werden, bis die Verbindung steht.

wobei dann sleep zu benutzen schmutz ist :p

der verbindungsaufbau dauert sicher unterschiedlich lang (zumindest auf unterschiedlichen system.

Woran merkst du, das deine Verbindung steht ? Hast du was asynchrones (asynchrone sockets z.b.) hast eh schon multithreading / multiprozessing. Also Solltest auf die Signale / Events des anderen Threads warten, und ned einfach auf die Zeit vertrauen :-)
Events (Threading) sind hier die Ansaetze, such mal nach SetEvent / RaiseEvent WaitForSingleObject .... etc.

Timer kann man sich damit auch selber bauen :p

Ne vernuenftige Fortschrittsanzeige wirst bei asynchronen Threads / prozessen ned hinbekommen, wenn dir der andere Prozess ned die daten ueber dessen fortschritt meldet. Als alternative kannst trotzdem nen Balken machen der bis zu nem timeout laeuft.

Ciao ....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
05.05.2004, 13:09 Uhr
~spaxx
Gast



C++:
        for(int i=0;i<m_oaServerfeld.GetSize();i++)            //läuft so lange, wie Server im Feld sind
        {
            CVorlage* pVorlage=(CVorlage*)m_oaServerfeld.GetAt(i);    //beschaffen eines Zeigers auf i-tes Element im Serverarray
            CString temp="";
            //formatieren eines Strings mit Programmname und Übergabeparameter
            temp.Format("D:\\Programme\\VBTools\\Stapeldateien\\verbinden.cmd \\\\%s\\%s > D:\\Programme\\VBTools\\Protokolle\\tempVerbindung.doc",pVorlage->GetServername(),pVorlage->GetLayoutverzeichnis());
            WinExec(temp,STARTF_USESIZE);    //starten von verbinden.cmd, aber minimiert
            Sleep(2000);        //Pause von 2 Sekunden
            m_Ladebalken.OffsetPos(a);        //erhöhen des Ladebalkens um 1 Einheit
            for(int j=0;j<m_oaDateifeld.GetSize();j++)    //läuft so lange, wie Dateien im Dateifeld
            {
                CDatei* pDatei=(CDatei*)m_oaDateifeld.GetAt(j);    //besorgen eines Zeigers auf i-tes Element aus Dateifeld
                CString temp2="";
                //formatieren eines Strings mit Programmname und Übergabeparameter
                temp2.Format("D:\\Programme\\VBTools\\Stapeldateien\\kopieren.cmd %s > D:\\Programme\\VBTools\\Protokolle\\tempKopieren.doc",pDatei->GetPfad());
                unsigned fehler=WinExec(temp2,STARTF_USESIZE);    //starten von copy.cmd, aber minimiert
                m_Ladebalken.OffsetPos(a);    //erhöhen des Ladebalkens um 1 Einheit
                UpdateWindow();
                Sleep(2000);
                UpdateData(FALSE);
            }            
            //starten von verbindungAbreissen.cmd, aber minimiert
            WinExec("D:\\Programme\\VBTools\\Stapeldateien\\verbindungAbreissen.cmd > D:\\Programme\\VBTools\\Protokolle\\tempAbreissen.doc",STARTF_USESIZE);
            m_Ladebalken.OffsetPos(a);        //Ladebalken um eine Einheit weiter setzen
            
            Sleep(2000);
            UpdateData(FALSE);        //Aktualisieren der Steuerelemente

        }




Also beim 1. Durchlauf der j Schleife setzt er den Ladebalken nochj eins hoch. Aber beim nächsten mal nicht. Und wenn er mit allem fertig ist, dann macht er den Ladebalken auf einen schlag voll.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
05.05.2004, 13:56 Uhr
RHBaum



Naja, das mit den Batchdateien waer fuer mich nur absolute noetloesung.

Dateien kopieren kannst ueber C++, dann hasst auch die 100%kontrolle und kannst fortschrittsbalken bauen ....

fuer verbindung aufbauen und loesen meinst du sicher ne DFÜ verbindung oder sowas ? Ich wuerd versuchen das ueber die Winapi direkt zus steuern ... damit bekommst auch da die kontrolle ....

Musst dich nur mit den themen auseinandersetzen ... weiss nicht, wie professional dein projekt sein soll, und wieviel andere randbedingungen es gibt ... ne ascii datei nach dateinamen auszulesen uund die dateien zu kopieren sollt kein prob sein ... :p

Ciao ...
 
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: