mikrocontroller.net

Forum: PC-Programmierung WinDDK + threads


Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Bin gerade dabei einen kleinen Treiber zu schreiben der eingehende Daten 
vom Netzwerk verarbeitet und geänderte Daten verschickt. Nun habe ich 
das ganze so das er wenn er auf einen QuadCore läuft auch 4 Threads 
öffnet. Leider habe ich das Problem das er eigentlich immer nach einer 
Zeit hängen. Jetzt weis ich leider nicht woran das liegt. Muss ich beim 
compilieren den Parameter -M mitgeben wenn ich mehrer Threads machen 
will. Benutze die normale WinDDK 3790.

Danke im vorhinein

MFG Gast

Autor: Andre R. (ryan87)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Parameter -M ist für Multi-Prozessor. Ich denke das DDK 
unterscheidet da aber noch zwischen Multi-Core und Multi-Prozessor. 
Sonst würd ich einfach sagen mal mit -M ausprobieren :)

Außerdem vermute ich, dass du irgendwo ein Deadlock produzierst, da du 
sagst dein Treiber bleibt hängen. Bei mir äußert sich so ein Deadlock 
immer damit, dass einfach gar nichts mehr geht, Bild bleibt stehen, Maus 
bewegen etc unmöglich.
Oder du hast einen Logikfehler und dein Treiber hört dadurch auf Daten 
zu verarbeiten. Ohne eine genauere Beschreibung kann ich dir da aber 
auch nicht weiterhelfen.

MfG
Andre

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Erstmals danke für die Antwort. Ich werde das mit den -M aufjedenfall 
mal testen.

Mein Treiber hat auch das Problem das der Rechner auch wenn der Treiber 
bereits gestoppt (entladen) nach einer gewissen Zeit hängen bleibt. MAus 
geht noch aber er reagiert auf keinen klick mehr. Werde das ganze mals 
testen wenn ich in den Threads gar nichts mache. Sprich starten und 
gleich wieder stoppen.

MFG Gast

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

HAbe das mi den hängen bleiben nun halbwegs im Griff habe nun aber ein 
anderes Problem. Ich muss mit eine anderen Treiber kommunizieren was 
bisher auch funktioniert. Nun muss ich mich allerdings beim anderen 
Treiber in einer Eventqueue eintragen und auf dieses Event hören. Das 
eintragen geht aber ich finde keinen Befehl mit den ich das Event 
initialisierne lassen kann. Im Usermode gehts ja mit OpenEent. Kann mir 
bitte jemand sagen wie man das im KernelMode am besten macht?

Danke

MFG Gast

Autor: Andre R. (ryan87)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau mal unter KeInitializeEvent nach.
Ich programmiere hauptsächlich mit dem KMDF, hab also von dem WDM kram 
nicht sooo viel Ahnung, aber ich denke du suchst diese Funktion.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.