Avatar billede dr_chaos Nybegynder
28. marts 2005 - 19:53 Der er 14 kommentarer og
1 løsning

Timer i webservice

Jeg har en webservice hvor jeg har en case sætning.
I den case sætning ønsker jeg at en bestemt bool skal være true i 10 sekunder inden den går videre til næste state.
Hvordan kan jeg gøre det ?
Avatar billede arne_v Ekspert
28. marts 2005 - 20:02 #1
Sådan noget a la:
  - metode A kaldes som sætter b=true og starter en timer som sætter b=false efter 10 sek.
  - metode B kaldes og tester på b
?

Men er det ikke bare at lave en helt normal timer ?
Avatar billede dr_chaos Nybegynder
28. marts 2005 - 20:05 #2
måske jeg har lavet et eksempel som jeg prøver at få til at køre:
[WebMethod]
        public string test()
        {
            System.Diagnostics.Debug.WriteLine("test");
            try{
           
                System.Timers.Timer timer1 = new System.Timers.Timer();
                timer1.Interval = 10000;
                timer1.start;
                return "Success";
            }
            catch(Exception e)
            {

                System.Diagnostics.Debug.WriteLine(e.ToString());
               
            }
return "Failure";
        }

Det er meningen at succes skal returneres efter 10 sek. jeg har prøvet en masse ting men der er ikke noget som virker.
Avatar billede dr_chaos Nybegynder
28. marts 2005 - 20:06 #3
den case sætning som jeg bruger ser sådan her ud:

Det er i case 6 at jeg skal bruge timeren:

public void PerformNextAction()
        {
            switch(LastActionID)
            {
                case 2:
                {
                    DealPocket();
                    break;
                }
                case 3:
                {
                    DealFlop();
                    break;
                }
                case 4:
                {
                    DealTurn();
                    break;
                }
                case 5:
                {
                    DealRiver();
                    break;
                }
                case 6:
                {
                    ShowPlayersCard = true;
                    System.Diagnostics.Debug.WriteLine("test");
                    System.Timers.Timer timer1 = new System.Timers.Timer();
                    timer1.Interval = 10000;
                    timer1.Start();
                    LastActionID = 7;
                    PerformNextAction();
                    //End game
                    break;
                }
                case 7:
                {
                    System.Diagnostics.Debug.WriteLine(LastActionID);
                    break;
                }
            }


        }
Avatar billede arne_v Ekspert
28. marts 2005 - 20:38 #4
jeg er lost
Avatar billede dr_chaos Nybegynder
28. marts 2005 - 21:15 #5
Timeren skal være i case 6.
Der skal være en pause på 10 sek før at LastActionID sættes til 7.
Hvordan laver jeg denne pause ?

case 6:
                {
                    ShowPlayersCard = true;
                    System.Diagnostics.Debug.WriteLine("test");
                    System.Timers.Timer timer1 = new System.Timers.Timer();
                    timer1.Interval = 10000;
                    timer1.Start();
                    LastActionID = 7;
                    PerformNextAction();
                    //End game
                    break;
                }
Avatar billede arne_v Ekspert
28. marts 2005 - 21:19 #6
Og du kan ikke bare bruge:

Thread.Sleep(10000);

?
Avatar billede dr_chaos Nybegynder
28. marts 2005 - 21:24 #7
vel ikke når jeg ikke afvikler webservicen i en thread ?
Avatar billede arne_v Ekspert
28. marts 2005 - 22:38 #8
Se - det ved jeg ikke - fordi jeg har stadigvæk ikke helt forstået
hvad det er du vil
Avatar billede guidmaster Nybegynder
28. marts 2005 - 23:05 #9
Du kan fint stoppe den tråd som afvikeler selve koden som du har din web serverice som arne_v nævner.

Men jeg må nok som arne_v sig at jeg bestemt heller ikke er med på hvad det er du vil - meste af alt ser det ud som om du lidt 'misbruger' en web service. Hvorfor er det web servicen der skal sørge for en pause? Det mest naturlige vil jo så afgjort være at det må være op til de kaldene applikationer at afgøre om der skal være en pause.
Avatar billede dr_chaos Nybegynder
29. marts 2005 - 09:25 #10
Jeg bruger case sætningen til at bestemme hvilken et "state" et pokerspil befinder sig i.
Når LastActionID er 6 er det fordi at alle kort er delt ud og der skal vises kort fra de spillere som er tilbage.
De resterende spillers kort skal vises i 10 sekunder inden der startes et nyt spil.
Det nye spil startes når lastactionid er 7.
Pokerspillet er opbygget på en måde hvor brugeren puller et bord objekt fra serveren.
Det jeg vil sikre mig er at LastActionID forbliver 6 i 10 sekunder og derefter bliver 7. Det er den 10 sekunders pause jeg gerne vil bruge en timer til.

Case sætningen ligger i et class library.
Avatar billede guidmaster Nybegynder
29. marts 2005 - 13:22 #11
Som sagt så er det bare at kalde Thread.Sleep(10000) som arne_v siger
Avatar billede dr_chaos Nybegynder
29. marts 2005 - 14:43 #12
Jeg fik thread sleep til at virke.
Jeg har et opfølgende spørgsmål i samme kategori.

Er der nogen måde jeg kan afbryde den thread sleep på?

Efter f.eks. 5 sekunder ?
Avatar billede arne_v Ekspert
29. marts 2005 - 17:39 #13
Hvis du har en reference til tråde kan du kalde Interrupt
Avatar billede dr_chaos Nybegynder
29. marts 2005 - 17:41 #14
ok smid lige et svar.
Tak for hjælpen
Avatar billede arne_v Ekspert
29. marts 2005 - 17:43 #15
ok
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