| |

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 | 683 | 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 |
  |
|
Neu! sevEingabe 3.0 
Einfach stark!
Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Weitere InfosTipp des Monats Access-Tools Vol.1 
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere 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
|
|