vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Multithread für COM Zugriff 
Autor: haribo
Datum: 06.03.06 15:09

Hi an alle,
ich schreibe gerade ein Programm, das diverse Geräte über die serielle Schnittstelle ansprechen und abfragen soll. Nun kann ja immer nur eine Anfrage zur selben Zeit bearbeitet werden, da ansonsten eine Datenkollision auftritt. Ich habe also eine Klasse, die ein MSComm geladen hält. Über eine Methode dieser Klasse kann ich nun z.B. den Status eines Gerätes anfragen. Damit sich verschiedene Anfragen nicht in den Weg kommen, hab ich ein Ticketsystem mit eingebaut. Das funktioniert in etwa so:
1.) Ziehe ein Ticket
2.) Warte bis Du dran bist
3.) Schicke Daten auf den Bus
4.) Warte auf Antwort
5.) Lass das nächste Ticket dran
Das funktioniert über diese Funktionen:
Private Sub WaitInBusQueue()
    Dim myTicket&
    Call TakeTicket(myTicket)
    Do While myTicket <> CurrentTicket: DoEvents: Loop
End Sub
 
Private Sub TakeTicket(ByRef Ticket&)
    Ticket = NextFreeTicketNumber
    NextFreeTicketNumber = (NextFreeTicketNumber + 1) Mod 1073741824
End Sub
 
Private Sub NextTicket()
    CurrentTicket = (CurrentTicket + 1) Mod 1073741824
End Sub
Ausserdem noch die Methode SendData(), die Daten sendet und empfängt.
Public Sub SendData()
    Call WaitInBusQueue     'Warte bis an der Reihe
    Com.Output = "STATUS1"  'Sende Anfrage
    Call CatchResponse      'Warte auf Antwort
    Call NextTicket         'Nächster ist dran
End Sub
Ich nehme also ein Ticket, und wenn ich dran war, und alles erledigt habe, rufe ich NextTicket() auf und der nächste ist dran.
Theoretisch ganz gut, nur habe ich jetzt ein dickes Problem!
Ich rufe meine Methode SendData() auf, die fängt an zu senden, weil keiner vor ihr ist. Währenddessen rufe ich SendData() nochmal auf, jetzt merkt sie, das sie noch nicht dran ist und wartet in der Funktion WaitInBusQueue(). Klingt gut? Denkste, die erster SendData is nämlich durch den zweiten Aufruf einfach abgebrochen worden und konnte das CurrentTicket nicht erhöhen. Ergo, die zweite SendData() hängt endlos in der Warteschleife.
Hat jemand irgendeine Idee, wie ich das Problem umgehen kann? Ich dachte schon an einen zusätzlichen Thread, aber damit besteht das Problem immer noch. Brauche wirklich Hilfe! Vielen Dank an alle, die sich drum bemühen.

Gruss, haribo
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Multithread für COM Zugriff684haribo06.03.06 15:09

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel