05. marts 2002 - 10:45Der er
12 kommentarer og 2 løsninger
Dialoger og tråde??
Arbejder med MFC c++ i VisualStudio 6.0
Jeg er lidt grøn i det her med tråde... så bær over med mig :)
Mit problem er at jeg skal lave noge initialisering som bliver fortaget via et DLL kald. Denne initialicering er dog ikke afgørende for om min app i øvrigt kan starte op. Derfor:
Jeg vil gerne starte en tåd som tager sig af denne initalicering.. problemet kommer når jeg vil vise en dialog a la. den lille dialog der kommer MSN Messenger når der er en der logger af eller på (et lille vindue der viser nogle basale oplysninger uden at være interagtivt). Dette vidue / dialog skal være på mens den initalisere og selv lukke ned efter den er færdig. Dette alt imens hoved programet køre normalt videre, dog uden de funktioner som kræver denne initalisering... PUHA! håber du er med endnu... kort er spørgsmålet altså:
Hvordan opretter man en tråd som kan håndetere at vise en dialog taget fra recurserne imens Der bliver lavet noget initalisering, hvorefter dialogen / message viduet skal fjernes og træden lukkes ned .
Jeg er tilfreds med et link til et sted på nettet som beskriver en løsning der ligner den jeg skal bruge eller en forklaring på hvordan man kan håndtere dialoger fra recurserne i andre træde end hoved tråden...
Tak for din tålmodighed med mit lange spg.... ;) vh Dyrby
Hvad med bare at lave en modeless dialog (altså via Create og ikke DoModal), den har jo sit eget message-loop. Den kan du så lade klare initialiseringen.
Som jeg læser dit spørgsmål, skal tråden bare køre mens initialiseringen af DLL'en foregår - og de arealer tråden skal initialiserer ligger i din hovedtråd ?
Tråden skal initialiseres med (minimum) en pointer til den data-struktur som DLL'en i sin tur skal initialisere. DLL'en opfører sig jo (også i denne sammenhæng) som en helt integreret del af hver tråd - mig bekendt vil hovedtråden og undertråden have hver sit datasegment, selvom de bruger samme DLL. (Ellers ville f.eks. strtok(NULL, ",") og andre "halv-statiske" funktioner jo ikke kunne virke.)
Jeg har til en konvertering af gamle DOS-programmer (ikke-event drevne) til Windows lavet noget lignende - dvs. en tråd der kører den egentlige opgave, og en hovedtråd der venter/kører videre når det er afsluttet.
Princippet er noget i denne her stil:
class myClass { public: // Data } class myInitThread : TThread { // Nogle defs. og metoder myInitThread(myClass* ptrData, TDialog* ptrDialog); // constructor } void myInitThread::myInitThread(myClass* ptrData, TDialog* ptrDialog) { ptrDialog->Show(); // Kald dll function med initialisering af data. dllInitFunc(ptrData); ptrDialog->Close(); } class myMainForm : TForm { private: // Nogle defs. myClass dataToBeInited; TDialog* initDialog; myInitThread* initThread;
public: void myMainForm(void); }
void myMainForm::myMainForm(void) { // Normale constructor ting. initDialog = new TDialog(this); // Eller hvordan constructorer til TDialog nu er. initThread = new myInitThread(&dataToBeInited, initDialog); }
I C++ Builder indeholder Thread en OnTerminate event handler, så der ville jeg nok vælge at lade dialogen blive vist i myMainForm constructoren, og så "smække" en myMainForm metode på som OnTerminate handler på tråden - og lade denne OnTerminate handler lukke dialogen igen.
Mit problem er at denne initialisering taget "lang" tid ca 40 sekunder, og jeg vil ikke have at mit hoved program bliver låst i den tid, og hvis man "bare" laver dialogen modeless køre den ikke i en anden tråd :| tak for svaret dog :) Desuden vil jeg gerne lave noget animering af min dialog, og det vil jeg ikke have skal tage tid / låse mit hoved program... Tak for svaret dog ;) >> dyrby
Ikke fordi jeg ønsker at fortsætte i samme rille... jeg kan bare ikke lade være :) Jeg afviste jo dit første svar da det ikke kunne bruges og jeg kan jo ikke gå ud fra at du efterfølgende kommer med at svar der KAN bruges? ;)
Nej, selvfølgelig ikke, det er også helt op til dig selv hvordan du ønsker at gøre det. Det jeg mener er, at du kunne jo vente lidt med at afvise svaret. Ofte er det jo ikke ét enkelt indlæg der får folk til acceptere ens forslag, men en serie indlæg, efterhånden som dialogen udvikler sig.
Jeg håber du forstår, det var bestemt ikke ment negativt...
Hvis du først vil have dialogen vist når du er færdig med initialiseringen, kan du jo bare vente med at kalde Create.
Men det er måske ikke det du vil?
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.