Op naam van thread zoeken

Status
Niet open voor verdere reacties.

Dipke

Gebruiker
Lid geworden
29 dec 2011
Berichten
23
Hi,

Ik start verscheidene threads op en geef ze een naam.
Hoe kan ik een thread terugvinden met een welbepaalde naam.
De threads eens opgestart doen hun ding en verdwijnen dan terug.
Ik hoef te weten of bepaalde threads reeds gedaan zijn aan de hand van hun naam.

Hoe doe ik dit.
Groeten
 
dat is afhankelijk van hoe je de threads managed. Daar is dus geen eenduidig antwoord op. Als het puur checken is op gedane threads kun je bij de meeste technieken een postback doen vanuit de thread om te laten weten dat een thread klaar is.

Zie bijvoorbeeld ook hier (maar met .NET 4+ zijn er nog veel technieken)

http://msdn.microsoft.com/en-us/library/3dasc8as.aspx
 
Ik hoef deze eigenlijk niet te managen.
Om de x seconden controleer ik een map op bestanden.
De bestanden worden dan ingelezen en behandeld (ieder bestand in zijn eigen thread met de bestandsnaam als naam van de thread).
De thread gaat ook het bestand verwijderen op het einde en stoppen.
Aangezien de behandeling soms langer duurt dan de volgende controle, controleer ik of het bestand reeds in behandeling is.
In de Java versie haalde ik gewoon de collectie van alle threads op (eigen en programma) en controleerde die op naam.
Als de naam er in voorkwam wist ik dat het bestand reeds in behandeling is.

Dit is een notedop mijn probleem (Ik geraak met ProcessThread wel aan de threads, maar niet aan de naam).
PS : wegens compatibiliteitsproblemen moet ik met .net 3.5 werken

Mvg
 
Alle threads die nog geen callback hebben gedaan zijn dus nog bezig. Je kunt (zie link) ook een waitall doen en pas weer pollen als alle threads klaar zijn.
 
Bedankt voor de reactie.

Alleen hoef ik te weten, welke van mijn threads nog bezig zijn en is wachten geen optie omdat er een controle gebeurt om de 15 seconden en sommige threads 2 minuten bezig zijn.
Dit betekend dat dit bestand 8 maal gaat gevonden worden, maar slecht de eerste keer mag er een thread voor opgestart worden.
Wachten zou betekenen dat alle bestanden die binnenkomen ook moeten wachten en dit is geen optie.

Mvg
 
Misschien kun je beter gebruik maken van de filewatcher class in plaats van elke 15 seconde te kijken naar de bestanden? Als er een bestand bij komt er op reageren.

system.io.filesystemwatcher

En je zou ook gewoon je threads kunnen bijhouden (in een class) eventueel met een dictionary <string (filename),Thread> of wat dan ook.
 
Je zou een lock op de bestanden kunnen zetten als work-around.

Je kunt ook een lijst aanmaken en daar gedane bestanden uithalen. Elk bestand wat nog in de lijst staat is dus nog bezig. Dat is echter moeilijk thread-safe te krijgen tenzij je alle draaiende threads locked terwijl je de lijst doorloopt. Dat geldt in principe voor elke oplossing met async threads.

De timing tussen het lezen van de nieuwe bestanden en de async callback is namelijk niet te synchroniseren tenzij je de asynch threads verbied te completeren terwijl je onderhoud doet.

Als alternatief voor die oplossing kun je de lijst met bestanden vullen, de eerste bestandcheck ronde na het klaar zijn van de thread afvinken en pas na de tweede keer bestanden checken volledig uit de lijst verwijderen. Deze oplossing is in principe veilig, zolang het onbelangrijk is in welke volgorde bestanden gecompleteerd worden
 
Opnieuw bedankt voor het antwoord.
Het alternatief lijkt mij het beste en het veiligste en had ik in tussentijd reeds opgezet (volgorde is totaal onbelangrijk).

Wat nut heeft het om een thread een naam te kunnen geven als die nergens meer op te vragen is.

Groeten
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan