23. marts 2009 - 10:46Der er
11 kommentarer og 1 løsning
Threads og singleton
Hejsa
Jeg vil gerne høre jer, hvordan jeg laver dette stykke kode om, så jeg kan køre disse 3 threads i singleton, så der kun er en der kører af gangen.
void Test() { //Object thisLock = new Object(); // lock(this)
if (a) { System.Threading.Thread t = new System.Threading.Thread(RunA); t.Start(); }
if (b) { System.Threading.Thread t = new System.Threading.Thread(RunB); t.Start(); } if (c) { System.Threading.Thread t = new System.Threading.Thread(RunC); t.Start(); }
Men hvis du kun vil køre en af gangen, så efter du starter din tråd kan du indsætte følgende ... thrads og single har så vidt jeg ved intet med hinanden at gøre ...
indsæt: t.Join();
Så venter den med at gå videre indtil tråden er færdig ...
Den void Test() er en event som bliver triggered, og det kan være af typen a,b eller c.
Men der sker nogen gange det, at der kommer en ny event inden at den foregående er færdig med sin tråd. Jeg vil derfor gerne lave sådan, at der kun kan køre en af trådene af gangen, så de nye kommer i vente posisiton
Tak for tippet. Jeg har nu initialiseret en private Queue<System.Threading.Thread> ThreadQueue i starten, og tilføfet mine tråde dertil når de bliver kaldt.
Nu sidder jeg så og roder med en slags queueRunner, men det funger ikke helt
Jeg havde hurtigt bikset denne sammen, men kan se med det samme at det skaber problemer. Nogen fikse ideer?
private void QueueRunner() { while (ThreadQueue.Count == 0) { // wait } System.Threading.Thread t = ThreadQueue.Dequeue(); t.Start(); while (t.IsAlive) { // wait } QueueRunner(); }
Mutex garanterer ikke hvilken rækkefølge trådene bliver kørt i, men den garanterer at der kun er én af trådene der kører ad gangen. Håber det var det du ville....
Når jeg nu laver den mutex, så er jeg fri for at have en metode som jeg skrev lige før, som står og tjekker om der er noget der skal gøres? Det sørger den kode du har skrevet der for? Så når man laver en ny tråd, så venter _mutex.WaitOne() på at en tråd slutter, hvis der kører en?
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.