C# DEADLOCK

Pagina: 1
Acties:
  • 839 views

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo allemaal,

ik ben nieuw op tweakers, en hoop dat ik alles zo goed doe, zo niet hoor ik het graag.

ik zit met een redelijk groot probleem, ik ben al een paar weken bezig met een afstudeer opdracht, een apparaat dat een voeding test(belasting verhogen verlagen voltage meten en opslaan) ik heb een print ontworpen, laten maken, software voor geschreven (avr en C#.net op PC), nu alles werkte. Tot ik nu net een duur test doe en de software lang laat draaien, krijg ik een :

([ContextSwitchDeadlock Was Detected]The CLR has been unable to transition from COM context ...... to COM context ...... for 60 seconds).

de PC software loopt vast en ik dus ook, ik ben helemaal nieuw is C# en heb dit gebruikt omdat ik een interface via de PC wou. zou iemand mij alstublieft snel op weg willen helpen, ik heb over een paar dagen eindexamen.

dit is mijn code ik post alles maar want ik heb geen idee waar het in zit: (het is waarschijnlijk heel erg slordig, maar ik ken C# totaal niet)

(ik weet niet of ik de code zo erin moet plaken ofzoiets dergelijks)
(op advies van Compizfox code verwijderd en geplakt in pastebin, danku)

http://pastebin.com/4MHgGfMS

[ Voor 96% gewijzigd door Verwijderd op 20-04-2012 19:49 . Reden: op advies van Compizfox code verwijderd en geplakt in pastebin, danku ]


Acties:
  • 0 Henk 'm!

  • Compizfox
  • Registratie: Januari 2009
  • Laatst online: 00:32

Compizfox

Bait for wenchmarks

Gooi hem anders even op pastebin? De pagina wordt zo wel erg lang en de identation is verloren gegaan, wat het heel lastig leesbaar maakt.

Gewoon een heel grote verzameling snoertjes


Acties:
  • 0 Henk 'm!

  • Wolfos
  • Registratie: Oktober 2010
  • Laatst online: 11-09 23:02
Tja, dan ga je debuggen he?
Breakpoints kunnen handig voor je zijn.
http://www.homeandlearn.co.uk/csharp/csharp_s5p4.html

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoe kan ik debuggen als ik niet weet waarnaar ik zoek? ik weet amper hoe C# werkt. Ik heb in een paar dagen dit geschreven en ben vanaf 0 begonnen, zoveel mogelijk geprobeerd op te zoeken, maar ik heb gewoon geen idee wat dit is.

Acties:
  • 0 Henk 'm!

  • spone
  • Registratie: Mei 2002
  • Niet online
Dus simpel gezegd komt het erop neer dat je een stuk code dumpt, aangeeft dat het niet werkt en aan ons vraagt: fix het?

edit: zo kwam het dus op mij over gezien opmerkingen als "ik heb hier code maar heb verder geen idee hoe c# werkt", "geen idee hoe ik moet debuggen", "ik heb snel hulp nodig", en google heeft je er kennelijk ook niet mee kunnen helpen. Dan kan je uiteraard wel zeggen van 'help me op weg' maar dat is iets wat je op zich zelf ook wel zou moeten kunnen. Iets met interpretatie.

[ Voor 61% gewijzigd door spone op 20-04-2012 22:09 ]

i5-14600K | 32GB DDR5-6000 | RTX 5070 - MacBook Pro M1 Pro 14" 16/512


Acties:
  • 0 Henk 'm!

  • sPENKMAN
  • Registratie: April 2002
  • Laatst online: 04-09 12:42
Ik programmeer niet in C# maar heb je google al geprobeerd met de foutmelding? De eerste hit is:
Debug -> Exceptions -> Managed Debug Assistants

and unchecking the ContextSwitchDeadlock item.
zie; http://harriyott.com/2006...eadlock-was-detected.aspx

Eve char: Warock <TEST>


Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 12-09 10:43

Ventieldopje

I'm not your pal, mate!

Dan schakel je alleen de melding uit, lijkt me ook niet wat je wil aangezien een ContextSwitchDeadlock nog steeds gebeurt, misschien eerst opzoeken wat het is?

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@ spone, wat is dat voor reactie? :S waar haal jij dat uit mijn post? ik vraag toch duidelijk : "op weg willen helpen". zoals: waar het aan kan liggen, wat ik waarschijnlijk fout doe. Met : "debuggen" kan ik vrij weinig, ik kan dat zeker gebruiken als ik ongeveer weet waar het probleem zit, maar nu kan ik daar vrij weinig mee.

Acties:
  • 0 Henk 'm!

  • Wolfos
  • Registratie: Oktober 2010
  • Laatst online: 11-09 23:02
Verwijderd schreef op vrijdag 20 april 2012 @ 20:01:
Hoe kan ik debuggen als ik niet weet waarnaar ik zoek? ik weet amper hoe C# werkt. Ik heb in een paar dagen dit geschreven en ben vanaf 0 begonnen, zoveel mogelijk geprobeerd op te zoeken, maar ik heb gewoon geen idee wat dit is.
Gewoon op random plekken een breakpoint zetten, en als je dan een error krijgt zet je de breakpoint eerder in je programma, totdat je erachter bent welke lijn de error geeft.

Acties:
  • 0 Henk 'm!

  • GrandDestroyer
  • Registratie: Juli 2009
  • Laatst online: 08-09 00:07
Als je weet wat een deadlock is, kun je wel een paar plekken verzinnen waar het kan gebeuren en daar dus een breakpoint zetten. Wat je eventueel kan doen is System.out.println zetten in situaties waar jij denkt dat het onstaat. Deadlock is dus dat alles op elkaar gaat zitten wachten, kijk waar dit voor kan komen en zet breakpoints.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@ Wolfos, Dat zou ik in elke andere gebeurtenis ook doen, maar het gebeurde pas na ongeveer 15 minuten, en in die tijd heeft het programma alles al 100e keren doorlopen, dat vind ik ook het rare eraan, als het nu bijna meteen zou gebeuren zou ik het op die manier nog kunnen vinden.

ook had ik al opgezocht wat het precies inhoud, maar is bijna allemaal nog chinees voor mij. weet iemand toevallig hoe zoiets gebeurt? ik heb wat gelezen over een threath die aangeroepen word terwijl er nog in die zelfde threath gewerkt wordt.

PS: ik heb het programma nu alweer een uur draaien zonder dat het probleem zich voordoet. dus random breakpoints plaatsen lukt niet denk ik.

Acties:
  • 0 Henk 'm!

  • C0rnelis
  • Registratie: Juni 2010
  • Laatst online: 26-08 22:21
Conclusie: je applicatie is hoogstwaarschijnlijk niet thread-safe geschreven (al zou het misschien iets anders kunnen zijn: ik heb geen ervaring met c#), dit betekent dat bijvoorbeeld bij het resources delen (dus lezen/schrijven of opvragen output/versturen input van eenzelfde object) tussen meerdere threads, et cetera. Je kunt proberen om een cpu-intensieve taak op te starten tijdens het testen van je applicatie start waardoor het aannemelijk wordt dat er veel vaker context-switching plaats vind, de kans bestaat dat je dan sneller een deadlock situatie krijgt.
Ik weet niet wat voor opleiding je doet, maar in je post zie ik niet dat je bijvoorbeeld al weet wat een deadlock is of je al eerder met threading hebt gewerkt, et. cetera - terwijl dit voor een informatica opleiding bijvoorbeeld wel tot de basiskennis behoort (evenals debuggen met breakpoints). Ook zie ik de haast niet in verband met een afstudeerstage en een eindexamen? Dat is toch niet het einde van je stage?

edit:
Los van dit alles: wat heb je via bijvoorbeeld Google gevonden? Heb je bijvoorbeeld ook http://stackoverflow.com/...detected-error-in-c-sharp eens gelezen? En MSDN: ContextSwitch deadlock (MDA Timeout) ?

[ Voor 18% gewijzigd door C0rnelis op 20-04-2012 20:51 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
mijn opleiding is inderdaad niet informatica:P, ik ben meer van de elektronica/industrieele automatisering. mijn afstudeer opdracht is een project dat je tijdens een stage voor dat stage bedrijf maakt, maar je mag maar een bepaalde tijd aan je project werken, daarna heb je meteen oplevering en word het project geëxamineerd. nu krijgen wij op die opleiding 0 software, maar ik vind dit heel erg interessant dus heb me erin verdiept. heb mezelf C geleerd, en nu vanwege het feit dat ik een interface op de PC wil met mijn print ook C#. ik weet zeker wel wat threads zijn , maar niet hoe C# dit en deadlocks gebruikt(probeer er nu vallen der wijs achter te komen). ik vindt de opleiding die ik doe te makkelijk vandaar dat ik ook dit erbij gedaan heb.

maar ik denek dat ik het gevonden heb, ik heb een timer draaien die nogal wat moet doen, en om de 100ms aangeroepen wordt, heb het nu zo gemaakt dat de timer pas weer aangeroepen kan worden als hij helemaal klaar is. heb nu geen deadlock meer gehad.

dank u GrandDestroyer voor de zin: Deadlock is dus dat alles op elkaar gaat zitten wachten.

Acties:
  • 0 Henk 'm!

  • Oguz286
  • Registratie: Juni 2002
  • Laatst online: 23-02 10:10
En hoe heb je dat dan gedaan (dat ze op elkaar wachten)? Als je een globale variabele hebt gebruikt om dit aan te geven en deze variabele is niet beschermd door bijv. een semaphore, dan kan je nog steeds hetzelfde probleem hebben. :)

Acties:
  • 0 Henk 'm!

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

De Timers alleen zullen het probleem niet zijn. Kijk eens goed naar je DataReceived event van SerialPort1:
The DataReceived event is raised on a secondary thread when data is received from the SerialPort object. Because this event is raised on a secondary thread, and not the main thread, attempting to modify some elements in the main thread, such as UI elements, could raise a threading exception
MSDN: SerialPort.DataReceived Event (System.IO.Ports)

Je kunt dus niet zomaar globale variabelen of UI componenten (Timers ook?) aanspreken binnen dit event of binnen methods die je aanroept binnen dit event. Je zult hiervoor moeten synchronizeren, helemaal als je deze variabelen ook elders (in andere thread, zoals een Tick event van een Timer) leest/schrijft.

"The shell stopped unexpectedly and Explorer.exe was restarted."


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 12-09 10:03

Creepy

Tactical Espionage Splatterer

(jarig!)
Eeeh, met "debuggen" kan je niks terwijl je voor je afstuderen (!) code aan het schrijven bent?

Sorry, maar het is JOUW afstudeer opdracht, niet de onze. Dat zou je in principe dan ook zelf volledig moeten kunnen doen. Dat je vragen hebt en hier een topic wilt openen is prima, maar als je de basisnog niet door hebt en domweg onze FAQ en richtlijnen gewoon niet doorleest (daar staat ook in wat debuggen nu inhoud) dan houdt het hier gewoon op.

Hier gaan we er vanuit dat je dus wel zelf in staat bent om in elk geval iets te debuggen. Zo lastig is dat in C# nu echt niet. Dus loop stap voor stap door je code heen en controleer zoveel mogelijk tot het punt dat het mis gaat. Ook zien we graag in je startpost terug wat je nu zelf al uberhaupt hebt geprobeerd en ook dat mist volledig. Je komt nu echt niet verder dan "het doet poef en dit is mijn code, please help" ondanks dat je om tips vraagt om verder te kunnen.

In Het algemeen beleid #quickstart staat prima uitgelegd hoe een topicstart eruit zou moeten zien. Zeker voor schoolopdrachten (en al helemaal een afstuurdopdracht) letten we daar iets stricter op.

[ Voor 48% gewijzigd door Creepy op 21-04-2012 21:05 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1

Dit topic is gesloten.