| |

Fortgeschrittene ProgrammierungMultithread 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 |  |
 Multithread für COM Zugriff | 684 | haribo | 06.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 |
  |
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats sevWizard für VB5/6 
Professionelle Assistenten im Handumdrehen
Erstellen Sie eigene Assistenten (Wizards) im Look & Feel von Windows 2000/XP - mit allem Komfort und zwar in Windeseile :-) Weitere Infos
|
|
|
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
|
|