Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Funktion nach Programmstart ausführen?!

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
02.11.2005, 08:07 Uhr
deflow



hi @ all,

das problem hört sich banal an, hab aber trotzem damit zu kämpfen...
ich möchte nach dem programmstart eine funktion automatisch ausführen lassen, ohne das der user eine eingebe tätigen muss. klappt auch soweit, dass problem ist, das meine grafische oberfläche nicht richtig geladen wird. alle steuerelemente fehlen und werden erst nach der ablauf der funktion geladen...

kann mir bitte jemand sagen was ich falsch mache? bzw wo ich die funktion einbinden muss damit alles sauber läuft?

thx
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.11.2005, 08:24 Uhr
Taelan



Wo rufst du denn die Funktion auf?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
02.11.2005, 08:26 Uhr
mmc20
puss in boots


hi,
normalerweisse platziert man sowas in der OnInitDialog(), wenn du da natürlich auf controls zugreifst die noch nicht erstellt sind funktioniert das nicht.
zeig doch mal genauer was du machen willst.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
02.11.2005, 09:16 Uhr
deflow



hi, danke für die schnelle antwort!

um das ganze mal etwas genauer zu beschreiben:
ich habe ein programm geschrieben welches als update checker fungieren soll. die funktionen die dies veranlassen habe ich in eine dll ausgelagert. funktioniert alles wunderbar

in der eigentlichen *.exe habe ich dann nur ein eine gui die dem user ein paar informationen zeigt und eine progressbar. die progressbar läuft in einer fest definierten zeitspanne durch, sodas der user gezwungen ist eine weilte zu warten und das update durch zu führen.

dies soll alles ohne usereingaben geschehen und automatisch ablaufen, deswegen will ich meine update fkt ja auch automatisch beim starten der *.exe ausführen.

wenn ich jetzt meine fkt in der oninit() einbinde, was ich auch schon gemacht habe, wird zwar die funktion autom. gestartet und alles formgerecht ausgeführt, jedoch bekomme ich meine gui nicht richtig angezeigt. alle steuerelemete bzw texte werden erst nach ablauf der fkt angezeigt... was aber nicht sinn der sache ist.

greetz
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
02.11.2005, 11:34 Uhr
ao

(Operator)



Zitat von deflow:
alle steuerelemete bzw texte werden erst nach ablauf der fkt angezeigt...

... weil die Oberfläche blockiert ist, solange die Updatefunktion synchron im Oberflächen-Thread abgearbeitet wird. Du könntest das Update in einen eigenen Thread oder Timer-Handler legen (wenn Timer-Handler reicht, nimm den, das ist einfacher), dann wird die Oberfläche gemalt und quasi-gleichzeitig das Update ausgeführt.

Wenn du bis zum Ende des Updates jede Benutzeraktion an der Oberfläche verhindern willst, dann initialisiere die Steuerelemente als "disabled" und enable sie erst am Ende von Update.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
02.11.2005, 12:58 Uhr
deflow



danke, über nen thread hab ich auch shcon nachgedacht...
wie mach ich das mit dem timer?

kann ich es so machen das ich in den ressourcen ein neues timer-symbol (zB ID_CLOCK_TIMER) hinzufüge welches ich später dann benutze?
dann könnte ich ja mit SetTimer(ID_CLOCK_TIMER, 100, NULL) den timer starten...
um das timer-ereignis zu behandeln müsste ich ja dann eine funktion für die nachricht WM_TIMER hinzufügen oder?
in der funktion kann ich ja dann eigentlich den anderen code einfügen...

könnte es so irgenwie gehen oder bin ich total aufm holzweg?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
02.11.2005, 19:12 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Einfach mal im Forum nach AfxBeginThread googlen oder nach CreateThread oder schick mir ne mail. Ich hab für den VC 6 nen Beispielprojekt für nen Thread zusammengeklickert da die Frage hier schon öfter kam...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
03.11.2005, 16:34 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Argh... jetzt schreib ich schon im Forum googlen... Schlimm schlimm das ich jetzt so langsam aber sicher das Verb suchen vergesse... Hopsa das passiert mir nicht im RL
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
04.11.2005, 12:04 Uhr
LowFly



Der simpelste aller thread (zumindest für mein verständniss) ist das unten aufgeführte

mit

Code:

CWinThread* pThread1 = AfxBeginThread (thrFunction1, this, THREAD_PRIORITY_HIGHEST);



starteste du die thrFunction1 diese wiederum fürt nun alles was in der übergebenen funktion() steht in einem thread aus auch (auch ander funktionen).

Dieser code kommt in die Quellcode Datei

Code:

UINT DeineKlasse::thrFunction1(LPVOID pParam)
{
    DeineKlasse* pDlg = (DeineKlasse*) pParam;
    pDlg->Funktion();//<--Funktion wird in einem Thread ausgeführt

   return 0;
}



Code kommt in die Header datei

Code:

    static UINT thrFunction1 (LPVOID pParam);

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
07.11.2005, 08:26 Uhr
deflow



@ LowFly: super danke, funktioniert einwandfrei

habs aber auch mal mit dem timer versucht (wie obern beschrieben) klappt auch wunderbar...


greetz deflow
 
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: