Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


C# Compact Framework: Avsluta program/trådar

Postades av 2005-11-21 15:02:08 - Ted Ekeroth, i forum asp.net generellt, Tråden har 3 Kommentarer och lästs av 944 personer

Hej!

Är det någon som har bra koll på C# Compact Framework 1.1, och hur man hanterar trådar på ett bra sätt? Mitt stora problem är att avsluta en applikation som innehåller flertalet trådar.

Jag har lyckats en gång då jag ganska så maneullt avslutade trådar genom att kalla "close()"-metoder på dem som jag skrivit själv. Denna close-metod var/är enkel - sätter en bool till false (så att tråden ska gå ur sin while-loop). Så långt är det OK, men det finns andra problem:

Många tråda ligger och väntar på att något ska hända, i Monitorer. Dessa Monitorer använder sig av AutoResetEvent-klassen för att vänta (AutoResetEvetn.WaitOne() respektive AutoResetEvent.Set()). När trådarna är låsta i WaitOne() spelar det ingen roll om jag sätter en bool = false; då den inte tittar på det utan väntar på något.

Vad jag har försökt då med är att köra en close()-metod i Monitorn också som kör en AutoResetEvent.Set() (för att säga "något har hänt"). Tråden som då ligger låst i WaitOne() vaknar till o kollar läget. Därefter kan tråden se att bool variablen är satt till false och avsluta.

Teoretisk ska detta fungera, men blir oerhört kladdig kod och fungerar inte heller alltid (som t ex nu när jag skrivier om programmet en aning).

Vad jag undrar är ifall någon har en bra lösning på hur man hanterar denna problematiken! Observera att det är under Compact Framework jag letar en lösning, inte vanliga .NET 1.1.

Tack!

Lite kodexempel:

Här är en Monitor som har en metod som heter getData(). En tråd kommer att köra den metoden och fastna i "monitor.WaitOne()". Under den finns close()-metoden för Monitorn enligt beskrivningen ovan. Tanken är då att tråden vaknar, ser att cont == false (och går INTE in och låser sig igen med andra ord), returnerar nåt strunt.
<code>
public BufferObject getData()
{
while (buffer.Count == 0 && cont)
{
monitor.WaitOne();
}
BufferObject bo;
if (cont)
{
bo = (BufferObject) buffer[0];
buffer.RemoveAt(0);
System.Diagnostics.Debug.WriteLine(" CFNetworkingClient::DataBuffer> getData(): Getting frmStart-data!");
}
else
{
bo = new BufferObject(0, new byte[0]);
}
return bo;
}


public void close()
{
cont = false;
monitor.Set();
}
</code>


Här är den run()-metod som tråden kör i. Den statiska variablen _continue i FrmStart har blivit satt till false, och således när Tråden vaknat till enligt ovan, gör det något, kommer tillbaka till while-satsen och ser att _continue = false, och ska då gå ur while-satsen och dö.
<code>
public void run()
{
BufferObject sipMessage;
DataUnit unit;

while(FrmStart._continue)
{
sipMessage = inputBuffer.getData();
//tConsole.WriteLine("SIPPopper> Data received from DataBuffer!");

// och så vidare ...
</code>

Tanker, ideér, lösningar???

MVH


Svara

Sv: C# Compact Framework: Avsluta program/trådar

Postades av 2005-11-21 20:39:25 - André Claesson

Ett tips är att kolla in OpenNETCF's bibliotek. Det implementerar mycket av det som man saknar i Compact Framework.
Vet att de bl.a. har ett utökat Thread-stöd.
Såg dock i ett annat inlägg att du redan testat lite med det.


Svara

Sv:C# Compact Framework: Avsluta program/trådar

Postades av 2005-11-22 10:13:04 - Ted Ekeroth

Jo, har tittat lite på OpenNETCF:s grejor och även om de har en del schyssta saker kommer det inte hjälpa speciellt mycket i detta fall (tror jag iaf).

Vad jag tycker är konstigt är att jag hittar INGET på nätet (har googlat som en galning) gällande just Monitor-problemen, speciellt för CF. Hur löser man det faktum att trådar låser sig i en Monitor som ovan beskrivet, om man vill avsluta ett program eller helt enkelt bara ta bort alla trådar och monitorer för att t.ex. göra en ny uppkoppling?
Det måste ju vara en riktigt typiskt standard-grej inom programmering och borde således finnas en enkel lösning på det. Men jag vet inte.

De kodexempel som jag gav ovan är riktigt fula tycker jag. Att signalera monitorn med .Set() trots att det inte finns data att hämta och dessförinnan sätta en bool variabel till "false" så att man inte ska leta efter data är primitivt och ett fulhack. Men jag vet inget annat sätt att få loss tråden som ligger o väntar.

???


Svara

Sv: C# Compact Framework: Avsluta program/trådar

Postades av 2005-11-23 22:21:43 - André Claesson

Microsoft tycker inte att program ska stängas av i Windows Mobile...

Thread.IsBackground tillåter att man stänger programmet utan att avsluta trådar. Stödjs i CF 2.0.

/andrec


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 606
27 953
271 705
368
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies