vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 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

Allgemeine Diskussionen
Semaphoren! 
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
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Semaphoren!2.014unbekannt25.04.03 13:41
Re: Semaphoren!79Barönchen25.04.03 14:03
Re: Semaphoren!1.580unbekannt25.04.03 14:12
Und die Auflösung des Ganzen ...1.582unbekannt25.04.03 14:44

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