Avatar billede brops Nybegynder
10. august 2011 - 14:23 Der er 9 kommentarer og
2 løsninger

Program svare ikke/Deadlock

Hej

Jeg har lavet en application til at lave pluklister som køre en masse iterationer vha et par algoritmer.

Jeg har denne løkke til at lave en itteration:

//sætter den første løsning
sAlg.initalSolution(metode);

Stopwatch timer = Stopwatch.StartNew();
//her køre jeg hver iteration til en løsning er fundet
while (!sAlg.isFinished())
{
  timerPerIteration = Stopwatch.StartNew();
  //Køre næste trin i forbedrings heuristikken
  sAlg.improvementOfSolution(metode);
  setStatusBar(iteration, sAlg.NumberOfIteration, i+1);
  iteration++;
  timerPerIteration.Stop();
  numTicks += timerPerIteration.ElapsedTicks;
}
timer.Stop();

problemet er at når jeg starter denne kørsel ender jeg i at programmet stopper med at svare hvis jeg ligger det i baggrunden eller på anden måde klikker på det. Jeg ved kørslen køre færdig og programmet svare igen når kørslen er færdig, men dette er ikke optimalt da de kørsler jeg laver skal gennem ca gennem op til 350 iterationer, hvor der skal testes op til 50 noder i hver iteration, dette giver en kørselstid på op til 1.5 time for de største problemer

er der en måde jeg hver gang jeg har kørt en iteration kan få programmet til at svare.
sAlg.improvement: køre 2 test, som alt efter problemet størrelse tager mellem 0.5 sekunder og 1.5 min, jeg kan desværre ikke optimere mere på denne kørselstid mere end den allerede er, det er et par meget beregningstunge kørsler.

det er ikke lang til

/jonas
Avatar billede bvli Praktikant
10. august 2011 - 21:38 #1
Hej.

Du kan bruge en BackgroundWorker. Der er en del svar her på eksperten der gennemgår hvordan du bruger den. Eller du kan kigge her: http://msdn.microsoft.com/en-us/library/ywkkz4s1.aspx
Avatar billede arne_v Ekspert
10. august 2011 - 23:56 #2
Noget der koerer i lang tid skal koere paa en anden traad end event traaden.

BackgroundWorker er en af maaderne at goere det paa.

En glimrende maade.
Avatar billede brops Nybegynder
12. august 2011 - 13:21 #3
Jeg har prøvet at implementere det ud fra msdn eksemplet, men har ikke kunne få det til at virke.

Jeg skal aflevere opgave om 14 dage og det er ikke en det jeg bliver bedømt på, men implementeringen af algoritmer.

Jeg har ikke opgivet at få det til at køre, men tror jeg vil bruge tiden til at tune algoritmerne i stedet
Avatar billede Achchaos Nybegynder
20. august 2011 - 18:45 #4
Hvad med multithreading?
http://www.albahari.com/threading/
Avatar billede brops Nybegynder
24. august 2011 - 09:53 #5
Jeg har afleveret opgaven, har optimeret på en del andre kørsler og det har gjort at kørselstiden kom ned hvor man faktisk ikke når at opdage om programmet stopper med at svare.

Smid et svar alle 3 så er der points til jer alle
Avatar billede Achchaos Nybegynder
24. august 2011 - 11:08 #6
Så gør jeg det ^^
Avatar billede arne_v Ekspert
06. september 2011 - 01:57 #7
.
Avatar billede arne_v Ekspert
11. september 2011 - 23:31 #8
bvli?
Avatar billede arne_v Ekspert
15. oktober 2011 - 00:04 #9
??
Avatar billede brops Nybegynder
24. januar 2012 - 13:02 #10
Jeg lukkede nu, gav jer 2 der har svaret points, bvli smid en besked så skal jeg gerne oprette en ny tråd med point til dig
Avatar billede bvli Praktikant
24. januar 2012 - 20:28 #11
Nah .. pyt :)
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

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