System durch simple Anweisung blockiert

Diskutiere System durch simple Anweisung blockiert im Developer Network Forum im Bereich Hardware & Software Forum; Wenn ich die Ausführung eines VB-Programms mit Hilfe der API-Funktion "Sleep", oder dem "GetTickCount" über einen bestimmten Zeitraum verzögere...
  • System durch simple Anweisung blockiert Beitrag #1
D

Deep Space

Bekanntes Mitglied
Dabei seit
01.08.1999
Beiträge
2.004
Reaktionspunkte
0
Wenn ich die Ausführung eines VB-Programms mit Hilfe der API-Funktion "Sleep", oder dem "GetTickCount" über einen bestimmten Zeitraum verzögere, ist ebenfalls das ganze System in dieser Zeit blockiert, sodass keine Anwendungen mehr gestartet werden können.
Wie kann das sein, die Anweisung bezieht sich doch lediglich auf das VB-Programm, und wie kann diese Problem gelöst werden?

D.S.
 
  • System durch simple Anweisung blockiert Beitrag #2
D

Deep Space

Bekanntes Mitglied
Dabei seit
01.08.1999
Beiträge
2.004
Reaktionspunkte
0
Gute Idee!

Ich werde mal versuchen eine Verzögerung auf die Art in mein Programm einzubauen.

D.S.
 
  • System durch simple Anweisung blockiert Beitrag #3
D

Deep Space

Bekanntes Mitglied
Dabei seit
01.08.1999
Beiträge
2.004
Reaktionspunkte
0
Also auf die von dir beschriebene Art gelingt es mir nicht.

Denn sobald ich den Timer aus einer Prozedur aktiviere, wird die Prozedur (aus der der Timer aufgerufen wurde) trotzdem noch fortgesetzt.
Vielleicht gibt es eine Anweisung die di Ausführung der Prozedur anhält, dann nach Ablauf des Timer-Ereignisses diese fortsetzt.

Vielleicht gibt es auch noch eine andere Möglichkeit?

D.S.
 
  • System durch simple Anweisung blockiert Beitrag #4
C

cion

Bekanntes Mitglied
Dabei seit
13.07.2000
Beiträge
257
Reaktionspunkte
0
Naja was du auch machen könntest ist, das du alles was nach dem Timeraufruf kommt in eine extra procedure fasst und diese dann im Timer aufrufen läßt. Somit sparst du dir sogar die "wait" Variable. Somit müßte es aber gehen. Vergiss aber nicht den Timer wieder zu deaktivieren, so z.B.

Prozedur Machwas
BEGIN
machirgendwas
StarteTimer mit Interval X
ENDE

Prozedur Timer
BEGIN
machweiter
StoppeTimer
ENDE

Hoffe das hilft.

cion
 
  • System durch simple Anweisung blockiert Beitrag #5
C

cion

Bekanntes Mitglied
Dabei seit
13.07.2000
Beiträge
257
Reaktionspunkte
0
Naja was du auch machen könntest ist, das du alles was nach dem Timeraufruf kommt in eine extra procedure fasst und diese dann im Timer aufrufen läßt. Somit sparst du dir sogar die "wait" Variable. Somit müßte es aber gehen. Vergiss aber nicht den Timer wieder zu deaktivieren, so z.B.

Prozedur Machwas
BEGIN
machirgendwas
StarteTimer mit Interval X
ENDE

Prozedur Timer
BEGIN
machweiter
StoppeTimer
ENDE

Hoffe das hilft.

cion
 
  • System durch simple Anweisung blockiert Beitrag #6
D

Deep Space

Bekanntes Mitglied
Dabei seit
01.08.1999
Beiträge
2.004
Reaktionspunkte
0
Zu meiner Verwunderung musste ich feststellen, dass selbst bei einer "Do loop" Schleife, oder einer Schleife der Art "For i = 1 to 50000" das komplette System nicht mehr reagiert.
Wie ist das zu erklären?

D.S.
 
  • System durch simple Anweisung blockiert Beitrag #7
D

Deep Space

Bekanntes Mitglied
Dabei seit
01.08.1999
Beiträge
2.004
Reaktionspunkte
0
Zu meiner Verwunderung musste ich feststellen, dass selbst bei einer "Do loop" Schleife, oder einer Schleife der Art "For i = 1 to 50000" das komplette System nicht mehr reagiert.
Wie ist das zu erklären?

D.S.
 
  • System durch simple Anweisung blockiert Beitrag #8
D

Deep Space

Bekanntes Mitglied
Dabei seit
01.08.1999
Beiträge
2.004
Reaktionspunkte
0
Zu meine Verwunderung musste ich feststellen, dass selbst bei einer "Do loop" Schleife, oder einer Schleife der Art "For i = 1 to 50000" das komplette System nicht mehr reagiert.

Wie ist das zu erklären?

D.S.
 
  • System durch simple Anweisung blockiert Beitrag #9
C

cion

Bekanntes Mitglied
Dabei seit
13.07.2000
Beiträge
257
Reaktionspunkte
0
Hm, sehr komisch. Also ich wüßte nicht worans liegt. Bei Delphi wird bei einer FOR TO DO (in VB eben DO LOOP) lediglich das eigene Programm lahm gelegt, aber ganz Windows? Muß an Visual Basic liegen :supergrin:

cion
 
  • System durch simple Anweisung blockiert Beitrag #10
C

cion

Bekanntes Mitglied
Dabei seit
13.07.2000
Beiträge
257
Reaktionspunkte
0
Naja sleep ist ja ein Befehl der Windows API und es ist deshalb nicht unbedingt wunderlich, wenn sich das auf ganz Windows bezieht. Das sagt ja auch die API:

"You have to be careful when using Sleep and DDE. If a thread creates any windows, it must process messages. DDE sends messages to all windows in the system. If you have a thread that uses a wait function with no time-out interval, the system will deadlock. Therefore, if you have a thread that creates windows, use MsgWaitForMultipleObjects or MsgWaitForMultipleObjectsEx, rather than Sleep."

Nun ja die API sagt, das man eher MsgWaitForMultipleObjects benutzen sollte. Naja wenn du z.B. dein Programm mal für ne bestimmte Zeit anhalten willst, dann gibts doch dafür ne einfacherer Methode. Nimm doch einfach einen ganz normalen Timer und setz dessen Interval auf deine bestimmte Zeit, die dein Programm warten soll. Bevor du deinen Timer startest setzt du eine globale Variable von mir aus "wait = true". Im Timer selbst schreibst du dann selbst nur "wait = false". Ja damit hast ne Variable die beschreibt, wann dein Programm wartet und wanns wieder weitergehen kann!

cion
 
  • System durch simple Anweisung blockiert Beitrag #11
D

Deep Space

Bekanntes Mitglied
Dabei seit
01.08.1999
Beiträge
2.004
Reaktionspunkte
0
...oder an meinem schon stark verwüsteten und instabilen Betriebssystem :)

D.S.
 
  • System durch simple Anweisung blockiert Beitrag #12
C

cion

Bekanntes Mitglied
Dabei seit
13.07.2000
Beiträge
257
Reaktionspunkte
0
Ach Windows, das perfekte System, kann doch nichts lahmlegen... :sarcblink:

cion
 
  • System durch simple Anweisung blockiert Beitrag #13
P

PowerMike

Bekanntes Mitglied
Dabei seit
07.03.2000
Beiträge
4.538
Reaktionspunkte
0
Ort
bei FFM
Original erstellt von cion:
kann doch nichts lahmlegen... :sarcblink:

cion

Wolltest du nicht Nichts schreiben. :supergrin:

PS: 49,7 Tage :supergrin:

------------------
Keep on Posting
 
  • System durch simple Anweisung blockiert Beitrag #14
C

cion

Bekanntes Mitglied
Dabei seit
13.07.2000
Beiträge
257
Reaktionspunkte
0
Das ist schon seltsam, man startet ein Programm, rührt es 49,7 Tage nicht an, und dann stürtzt es von alleine ab. Geil, immerhin eins was es kann :supergrin:

cion
 
  • System durch simple Anweisung blockiert Beitrag #15
H

Hundsfreund

Guest
Leute!

Ich glaube ihr bringt etwas durcheinander. Weder Sleep() noch eine Schleife blockiert Windows, sondern nur den eingenen Prozess, bzw. mit der Schleife kann man die CPU überlasten.
In der Windowsprogrammierung sollte man keine langdauernde Scleifen Programmieren, weil dadurch blockiert man die Verarbeitung der anderen Ereignisse. Zudem sollte man keine Schleifen Programmieren, die die CPU totschlagen.
Dia art der DOS-Programmierung ist hier nicht geeignet, man muß auch an die Restliche Prozesse und an die CPU denken.
Übrigens kleine Sleep(1) d.h. 1 milisek an entsprechenden Stellen kann Wunder wirken, damit nicht alle anderen Prozesse und damit auch Windows lahmgelegt wird.
 
  • System durch simple Anweisung blockiert Beitrag #16
yks

yks

Bekanntes Mitglied
Dabei seit
21.01.1999
Beiträge
551
Reaktionspunkte
0
Ort
Hamburg
Hey,

programmiert da jemand noch 16-Bit Anwendungen unter Win3.1 oder Win95 ?
Wäre gut wenn das zuerst geklärt werden könnte.
Unter NT legt ein "Sleep" die anderen Prozesse nicht tot, da er nämlich vom BS keine Rechnleistung mehr bekommt !!!

Zu VB : Es gibt ein Befehl ( ich glaube "DoEvents" oder so ähnlich) den soll man während Schleifen ab und zu aufrufen, damit die Nachrichtenverarbeitung innerhalb des eigenen Prozesses gewährleistet wird.
Ich weiss nicht ab welcher VB-Version dieser zur Verfügung steht, in V6 ist er jedenfalls vorhanden.


...yks :wink:
 
Thema:

System durch simple Anweisung blockiert

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.181
Beiträge
1.579.177
Mitglieder
55.880
Neuestes Mitglied
Hahn
Oben