| |

Allgemeine DiskussionenSemaphoren! | |  | Autor: unbekannt | Datum: 25.04.03 13:41 |
| Hi Allz,
Semaphore: Klar, das sind Objekte die eindeutig in die Welt des Multitasking gehören, in VB kommt man dank der fehlenden (oder fehlerhaften) Multithreading-Fähigkeiten von VB, kaum in den Genuß (oder Pflicht) Semaphoren einsetzen zu können.
Es gibt aber dennoch spezielle Fälle, in denen der Einsatz von Semaphoren auch in VB einen Sinn geben könnte.
Es gibt folgendes "teufliches" Szenario:
Ein User startet Euer Programm und weiß, dass das Programm gewisse Zustände wärend der Runtime in eine INI-Datei sichert. Sehr schön. Der "gewifte" User legt Euer Proggi in die Taskleiste und ändert während der Runtime den Wert in der Ini, um beispielsweise einen Punktestand zu manipulieren.
Der User hat aber vielleicht nicht die Kenntnis darüber, dass das Programm über wichtige Teile der Ini eine Prüfsumme gebildet hat und die Prüfsumme mit dem Inhalt der Ini vergleicht.
Natürlich kann man promt auf die Manipulation reagieren - aber auch: Man läßt den User zunächst im Glauben, das funzt . In Wahrheit befindet sich der User in einem Teufelskreislauf, unmerklich aber stetig wird das Programm immer langsamer, es scheint so, als friert Windows langsam aber sicher zu einem Eisblock, bis der User die Lust an dieser Sitzung verliert und ihm eine heilsame Lehre erteilt wurde: Lasse die Finger von der Ini weg!
Realisiert wird das mit einer Semaphore. Es ginge auch durchaus mit VB-Bordmitteln,
aber nicht so elegant.
'Die WinAPI-Funktionen:
PRIVATE DECLARE FUNCTION CloseHandle LIB "kernel32" (BYVAL hObject AS LONG) AS _
LONG
PRIVATE DECLARE FUNCTION WaitForSingleObject LIB "kernel32" _
(BYVAL hHandle AS LONG, BYVAL dwMilliseconds AS LONG) AS LONG
PRIVATE DECLARE FUNCTION CreateSemaphore LIB "KERNEL32.DLL" ALIAS _
"CreateSemaphoreA" (lpSemaphoreAttributes AS SECURITY_ATTRIBUTES, _
BYVAL lInitialCount AS LONG, BYVAL lMaximumCount AS LONG, _
lpName AS LONG) AS LONG
PRIVATE TYPE SECURITY_ATTRIBUTES
nLength AS LONG
lpSecurityDescriptor AS LONG
bInheritHandle AS LONG
END TYPE
PRIVATE CONST WAIT_TIMEOUT = 258&
PRIVATE hSemaphore AS LONG Jene "teufliche" Funktion:
Function CheckIni() AS Long
Static b As Boolean
Static n As Long
Dim hResult As Long
Dim sec As SECURITY_ATTRIBUTES
' Funktionen, die die Ini-Prüfen
If CRCSum <> Checksumme And Not b Then
b = True
n = 10
hSemaphore = CreateSemaphore(sec, 1, 1, Byval 0&)
End If
hResult = WaitForSingleObject(hSemaphore, n)
If hResult = WAIT_TIMEOUT Then n = n + 100
End If Wenn die Funktion also eine Manipulation an der Ini feststellt, so setzt es einmalig die Semaphore in hSemaphore. WaitforSingleObject wird durchlaufen. Aber dann geht es los: Jedes Mal wenn die Prüfsumme der Ini abgefragt wird, wird das System langsamer, dies wird durch WaitforsingleObject realisiert. Ist der Wert von n = INFINITE,
so kann der User nur noch den Stöpsel ziehen, weil nichts mehr geht, sprich: Dieser Task ist vom Taskscheduler von Windows ausgenommen. 0 |  |
 | 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 |
  |
|
sevISDN 1.0 
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Oktober 2025 Matthias KozlowskiUmlaute konvertierenErsetzt die Umlaute in einer Zeichenkette durch die entsprechenden Doppelbuchstaben (aus ä wird ae, usw.) Neu! sevCommand 4.0 
Professionelle Schaltflächen im modernen Design!
Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. 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
|
|