Avatar billede repsak Nybegynder
11. maj 2003 - 23:24 Der er 12 kommentarer og
2 løsninger

simple thread

Jeg skal skrive et ganske simpelt konsolprogram til håndtering af flere tråde. Hver hardcodede tråd skal blot kalde en metode som f.eks.
class Hanler{
Handler(int i){
  while(true) Console.WriteLine("Now serving "+i);
}
}
How to start? :-)
Avatar billede simon.ulsnes Nybegynder
11. maj 2003 - 23:51 #1
For hver tråd:
                ThreadStart ts = new ThreadStart(DinMetode);
                Thread t = new Thread(ts);
                t.Start();

                void DinMetode() {}

- Simon
Avatar billede simon.ulsnes Nybegynder
11. maj 2003 - 23:52 #2
Nå ja, husk at importere System.Threading...

using System.Threading;

- Simon
Avatar billede simon.ulsnes Nybegynder
11. maj 2003 - 23:53 #3
Alternativt kan du kigge på ThreadPool.QueueUserWorkItem(WaitCallback) hvis du har et stort (ukendt) antal tråde...

- Simon
Avatar billede repsak Nybegynder
12. maj 2003 - 08:28 #4
Cool men det ser ikke ud til at virke på følgende arkitektur:

using System;
using System.Threading;

class Service{
    int i;

    public Service(int i){
        this.i = i;

    }
    public void hej(){
        while(true){
            Console.WriteLine("Service " + i);
        }
    }
}

public class ThreadExample {
   
    ThreadExample(){
        Service s = new Service(1);
                Service s2 = new Service(2);
       
                Thread t = new Thread(new ThreadStart(s.hej()));
                Thread t2 = new Thread(new ThreadStart(s2.hej()));
       
                t.Start();
        t2.Start();
    }
    public static void Main(){
        new ThreadExample ();
    }
}
Avatar billede burningice Nybegynder
12. maj 2003 - 12:19 #5
hehe... jooh, det virker nok, men du bliver nok nød til at lave en Thread.Wait i din hej-void, ellers får den tråd din konsol kører i aldrig lov til at skrive din tekst ud.
Avatar billede repsak Nybegynder
12. maj 2003 - 13:49 #6
Hej, jamen ovenstående kode vil ikke compileres. Det er
Thread t = new Thread(new ThreadStart(s.hej())); som er gal (vist)
Avatar billede simon.ulsnes Nybegynder
12. maj 2003 - 13:54 #7
Du skal ikke have () efter s.hej, da det er en henvisning til funktionen og ikke resultatet af den du vil have fat i... :)
Det fungerer på samme måde som events, faktisk.

- Simon
Avatar billede burningice Nybegynder
12. maj 2003 - 15:02 #8
simon.ulsnes>> ligesom delegates mener du vel :) events er jo en form for multicast-delegate.
Avatar billede simon.ulsnes Nybegynder
12. maj 2003 - 15:16 #9
cyberfessor >> Præcis, både events og ThreadStart-argumentet er jo delegates... Men det er jo ikke sikkert at mande ved hvad det er, så jeg tænkte at det var bedst at sammenligne med noget som alle med sikkerhed har arbejdet med... :)
Avatar billede repsak Nybegynder
12. maj 2003 - 15:18 #10
2 spørgsmål:
simon.ulsnes -> hvad så hvis jeg ønsker at overføre parametre til hej() ? (kan jeg jo ikke når jeg fjerner () eller hvad? :-)
cyberfessor -> Thread.Wait findes ikke umiddelbart...?
Avatar billede burningice Nybegynder
12. maj 2003 - 15:24 #11
repsak>> så er det Thread.Sleep(), eller noget lign. ;) Ang. det med parametre, kan du ikke overføre dem ved hjælp af en ThreadStart. Du skal i stedet bruge variabler som alle dine metoder har adgang til, og på den måde kan du bestemme hvordan din thread-rutine skal køre igennem.
Avatar billede simon.ulsnes Nybegynder
12. maj 2003 - 15:36 #12
Med ThreadPool.QueueUserWorkItem kan du overføre ét objekt til din funktion, men jeg vil stadig anbefale at du gør som cyberfessor beskriver.

public class hej
{
    public int tal = 0;
    public hej(int tal) { this.tal = tal; }
    public void thread() { Console.WriteLine(this.tal.ToString()); }

    public static void Main(string[] args)
    {
        hej h = new hej(89);
        Thread t = new Thread(new ThreadStart(h.thread));
        t.Start();
    }
}
Avatar billede repsak Nybegynder
12. maj 2003 - 16:01 #13
Ahhhh så kom der jo god karma - og lige det som jeg ville have... :-)

cyberfessor -> post lige et svar så får I 50/50 :-)
Avatar billede burningice Nybegynder
13. maj 2003 - 10:29 #14
svar :)
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