Avatar billede glenn007 Nybegynder
29. december 2008 - 19:20 Der er 10 kommentarer

timer spørgsmål ?

kan den samme timer kører mere end en gang på samme tid. hvis man skriver den skal starte igen og man ikke har fortalt den den skal slukke forinden.

tænkte om timer1 feks kan køre flere steder på samme tid den kan den vel ikke elelr hvad. ?
Avatar billede wosgam Nybegynder
29. december 2008 - 19:52 #1
nej don't think so, men hva med at kører to forskellige timer på samme tid?
Avatar billede arne_v Ekspert
29. december 2008 - 20:09 #2
du kan godt have flere timere

og en timer starter igen selvom den tidligere kørsel ikke er færdig endnu
Avatar billede glenn007 Nybegynder
29. december 2008 - 21:27 #3
hmm okey, kan man så sikre sig mod at en timer ikke kører to gange med lidt kode.

hvis jeg gør således 

timer1_tick()
{
afvikler_KÆMPE_resurce_krævende_kode();

}


så kører timeren den kode måske hvert sekund og hvis man kommer til at starte den timer før den er færdig med at afvikle koden inde i timeren så kan det jo godt knække filmen for en svag computer *G*
Avatar billede arne_v Ekspert
29. december 2008 - 21:49 #4
Nu lyder det ret heftigt et kære et kæmpe resource krævende job hvert sekund uanset
hvordan man synkroniserer.

Men jeg kan se flere mulige løsninger.

Du kunne lade koden bruge lock på et static objekt. Så vil de vente på hinanden. Nemt
men du risikerer at taskene hober sig op.

Du kunne lade koden teste på om den allerede kørte og så returnere hvis det var tilfældet. Så
undgår du at taskene kan hobe sig op.

Du kunne lade timeren bare sætte task i en queue og så have en enkelt tråd der
henter fra den tråd og processer.
Avatar billede glenn007 Nybegynder
29. december 2008 - 22:32 #5
ja jeg kan godt se det nok er bedst at sætte en variabel til høj hvis koden køre og lav når den er færdig. og timeren så tjekker den variabel inden den kører sig selv igen.

smider du et svar arne :)

løsningen er nok således ud fra din info.

timer1_tick()...
{
if (jeg_kører==1)
{
this.timer1.Stop();
else
{
this.timer1.Start();
}
}
Avatar billede arne_v Ekspert
29. december 2008 - 22:35 #6
Vent lige lidt.

Mine råd er baseret på System.Threading.Timer - jeg kan se at du bruger System.Windows.Forms.Timer !

Lad mig lige tygge lidt på den ...
Avatar billede arne_v Ekspert
29. december 2008 - 23:10 #7
Nu er jeg forvirret.

Tick event i en System.Windows.Forms.Timer kører i event tråde og den hænger GUI
hvis den er lang tid om at køre.

Så den duer slet ikke til langvarige tasks.
Avatar billede glenn007 Nybegynder
30. december 2008 - 09:14 #8
tick event er jo bare det der sættes iværk inden den starter forfra med at tælle.

Der burde da ikke være noget der blokere noget hvis man gør således...

private void timer2_Tick(object sender, EventArgs e)
        {
            kæmpekode();
        }


men jeg kender slet ikke til System.Threading.Timer har du et eksempel hvor den slags timer bruges :)
Avatar billede arne_v Ekspert
31. december 2008 - 01:22 #9
Prøv og test med:

private void timer2_Tick(object sender, EventArgs e)
        {
            Thread.Sleep(10000);
        }
Avatar billede arne_v Ekspert
31. december 2008 - 01:25 #10
using System.Threading;
...
Timer t = new Timer(new TimerCallback(DoIt), someobj, 0, intervalinmillisec);
...
public static void DoIt(Object o)
{
  ...
}

Men der er jo også System.Timers namespacet !

http://msdn.microsoft.com/en-us/library/system.timers.aspx
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester