08. december 2000 - 15:25Der er
8 kommentarer og 2 løsninger
Standse en proces
Jeg er ved at lave et program, som udfører en langvarig beregning. Beregningen udføres når brugeren trykker på en tast, som medfører et kald til en metode.
I princippet forestillede jeg mig noget lignende nedenstående, men det virker ikke, fordi jeg kan overhovedet ingenting gør, når while(1) alias beregningerne begynder. Men hvordan løser jeg så problemet?
Hvis du har en applikation med en brugerflade, og du har langvarige beregninger bør man gøre et eller andet for at sørge for at brugerfladen er responsiv. Man gør det som regel på flg. måder:
1) Idle-processing, dvs. en funktion/metode, der udføres, når systemet ikke har andet at lave. Under Windows har du direkte en idle-message og under X-Windows kan du sætte WorkProcedures op. Selvom dette sparer dig for en masse - tror du - så stiller dette til gengæld store krav til hvor små iterationerne i arbejdet må være, for at du ikke får en ikke-responsiv app. 2) Tråde er gode og enkle at håndtere, og det gælder både under Win32 og pthreads under UNIX. Og det med effektiviteten af tråde forstår jeg ikke rigtigt, for man kan sætte thread-priority temmeligt højt, således at det bare kører derudaf. Men det er som regel ikke anbefalelsesværdigt. Hvis du kører Windoze og den gamle MFC, findes der en tråd-klasse, du kan bruge direkte (CWinThread). Ellers har jeg et lille bibliotek du kan få, hvor du blot skal specialisere en enkelt metode, så har du en virkende tråd. Og den er som sagt et ægte objekt, så den ryder ordentligt op (efter sig selv) ved objekt-destruktion.
mvh.
Moykal
PS: Hvis du er interesseret i trådklassen, så sig til (michael_w_olesen@hotmail.com). Hvis du anvender COM, skal der lige lidt instruktion til, hvorledes du \"overrider\" to mere metoder etc.
Så anvender du formodentligt ikke MFC, jeg kender ikke Borland, men de har sikkert deres eget klasse-bibliotek. Hvis du skal anvende flere tråde, der evt. kan finde på at accessere fælles/global data, så kan du også fint gå igang med at læse om CRITICAL_SECTION\'s, Mutex\'es, Semaphores og Events... Igen... skriv bare, hvis du mangler eksempler.
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.