Forum: PC-Programmierung WinDDK + threads


von Gast (Gast)


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

von Andre R. (ryan87)


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

von Gast (Gast)


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

von Gast (Gast)


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

von Andre R. (ryan87)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.