Ikke så vidt jeg ved, men du kan eks. gøre sådan her.
Sub EnLangsomBeregning() Dim bAllDone As Boolean While Not bAllDone \' Lav en beregning DoEvents WEnd End Sub
Hver gang systemet støder på DoEvenst vil den checke brugerinterfacet, og løbe andre kørende processer igennem. Derved undgår du at programmet \"fryser\" systemet i længere tid af gangen.
Hvis du kan aflæse din CPU, og se hvor meget den er belastet, via VB. Så kan du også lave en begrænsning på hvornår dit VB-program skal lave noget og ikke.
Det er et uendeligt loop. Jeg checker nogle ting i en database i hvert loop, og kalder så en \"hjemmelavet\" pause funktion, som venter 30 sekunder via \"timer\".
Og du ønsker at denne procedure maks må bruge 10% CPU kraft.
Den del der tager mest kraft er jo når den aflæser databaen. Den mulighed der findes er jo at sprede denne over en længere tid.
Hvis vi siger at det normalt tager 1 sek. for dit program for at aflæse enkelte værdie r fra databasen, derefter venter 30 sek og aflæser derefter igen osv.
Det vil sige at din funktion tager 31 sek at udføre. Nu skal du egentligt bare forlænge aflæsningen til de 31 sek, og derefter droppe din indlagte pausen.
Der gælder nu for dit vedkomne at sætte din kode op så den kun aflæser i databasen under bestemte forhold, inden for de 31 sek.
Efter følgende diagram gælder kun for en aflæsning i en database. Programmet: -tid = 30 sek -Tjek om forhold er i orden (ja/nej) -Hvis ja aflæs -Vent tid sek.
Programmet bruger nu al kraften, også selvom jeg sletter alt hvad det lavet i loopet. Så det der tager kraften er nok min timer. Koden til den ser således ud: Public Function Pause(HalveSekunder) Dim PauseTid As Byte Dim Tid As Variant HalveSekunder = HalveSekunder / 2 Tid = Timer PauseTid = HalveSekunder Do Until Timer > Tid + PauseTid DoEvents Loop End Function
Nu virker det faktisk (mht. at bruge mindre kraft). Men den virker desværre ikke som en tæller længere?! Loopet varer kun en brøkdel af et sekund, uanset hvad jeg kalder rutinen med?!
Det er fordi den ikke belaster så meget på timeren som kører over cpu\'en.
Jeg tænkte mig heller ikke helt om, Tid_Ialt vil selvfølgelig ikke være det samme som en tids enhed du kan bruge. Denne enhed skal måske sættes højere op så det er nogen størrere tal du leger med. Men undgå Timeren, da den må bruge mere cpu kraft, end det er nødvendigt.
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.