Seite 1 von 1

Warum wird der Thread angehalten?

Verfasst: 03.11.2004 01:00
von pvmichael
Hallo!

ich bin gerade an einem Programm am arbeiten, bei dem ein ProgressBar während eines Netzwerkverbindungsaufbaus angezeigt werden soll. Jetzt hatte ich das über einen Thread versucht zu realisieren, jedoch wird der Thread angehalten (Pause), wenn der Server nicht erreichbar ist!?

Hat jemand eine Idee warum das so ist?

Code: Alles auswählen

Enumeration
  #Window_0
  #ProgressBar_0
EndEnumeration
    
Procedure ProgressBar(param)
  Repeat
      For thread_x = 0 To 100
        SetGadgetState(#ProgressBar_0, thread_x)
        Delay(10)
      Next
    Delay(1)
  ForEver
EndProcedure

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 235, 71, 300, 150, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar , "Warum hält der Thread an?")
      If CreateGadgetList(WindowID())
        ProgressBarGadget(#ProgressBar_0, 10, 10, 280, 100, 0, 100, #PB_ProgressBar_Smooth)
      EndIf
    EndIf
  EndProcedure
  
  Open_Window_0()
  
  CreateThread(@ProgressBar(),0)
  InitNetwork()
  
  x=0
  Repeat
    x = x+1
    Event = WindowEvent()
    While WindowEvent(): Wend 
    If x = 500
      CID = OpenNetworkConnection("141.1.1.1",80)
      MessageRequester("",Str(CID))
      x = 0
    EndIf
    Delay(1)
  Until Event = #PB_EventCloseWindow
Danke und Gruß

Michael

Verfasst: 03.11.2004 01:28
von pvmichael
Es scheint irgendwie mit dem Fenster zu tun zu haben, denn wenn ich statt dem ProgressBar nur ein Debug "test" mache läuft der thread weiter durch und wird nicht pausiert.

Verfasst: 03.11.2004 03:11
von Max.
pvmichael hat geschrieben:Es scheint irgendwie mit dem Fenster zu tun zu haben, denn wenn ich statt dem ProgressBar nur ein Debug "test" mache läuft der thread weiter durch und wird nicht pausiert.
Kann sein, dass ich Dich falsch verstehe - ist ja auch schon spät :wink: - aber bei mir läuft der Thread weiter - er stockt nur kurz, wenn Netzwerkverbindung nicht zustande kommt.

Verfasst: 03.11.2004 03:19
von Falko
Bei mir stockt der Balken nur einmal bis die Meldung von Norton Antivirus
seine üblich Abfrage, ob die Verbindung blockiert oder nicht blockiert werden soll. Danach läuft der Balken andauernd vom Anfang bis zum Ende durch und wiederhohlt sich. Die Messagebox zeigt Null an. Nach Ok
kurze Pause und weiter gehts. Vielleicht hilft die Aussage.

Mehr verstehe ich leider im Moment auch nicht was du da vor hast. :mrgreen:

Gruß Falko

> [edit] beim SP2 von XP habe ich persönlich die Firewall ausgeschaltet, da ich immer damit Probleme hatte wegen Zugriffe nach aussen.
>Da mußte sonst manuell die IP freigegeben werden.

Verfasst: 03.11.2004 10:03
von pvmichael
Das ist seltsam, bei mir wird der Thread so lange angehalten, bis der Timeout erkannt wird. Das sind gut mehr als 10 Sekunden die bei mir der Thread pausiert. Ich probiers heute mal unter WinXP, denn das mit dem Pausieren ist unter WinME passiert.

Verfasst: 03.11.2004 10:18
von Hoto
Schon seltsam, rein von der Logik her, dürfte der Thread eigentlich überhaupt nie ins stocken kommen, ein Thread müsste doch fast so unabhängig laufen, wie ein extra Programm, oder? Zumindest sind so meine eigenen Erfahrungen. Aber naja, bei WinME würds mich aber auch nicht wundern, wenns am OS liegt...

Verfasst: 03.11.2004 11:12
von Danilo
pvmichael hat geschrieben:Das ist seltsam, bei mir wird der Thread so lange angehalten, bis der Timeout erkannt wird. Das sind gut mehr als 10 Sekunden die bei mir der Thread pausiert.
Das liegt wohl an dem SetGadgetState() im Thread.

Deine Hauptschleife ist ja für 10 Sekunden angehalten, wie
Du bereits sagtest. SetGadgetState sendet nun eine Message
an Dein Hauptfenster, aber die EventSchleife dafür wartet
gerade, und kann die Message somit nicht abarbeiten.

Vielleicht solltest Du es genau andersrum machen: Fenster
in Hauptschleife, OpenNetworkConnection in einen Thread.

Verfasst: 03.11.2004 11:14
von pvmichael
Jetzt wird es noch seltsamer, bei mir pausiert der Thread auch unter WinXP!? :freak:

(Achja, es *muß* ein Timeout erzwungen werden, wenn Ihr an der Firewall sagt, die Verbindung wird nicht erlaubt, dann gibt es einen Reject, welcher den Thread nur pausiert.)[/b]

Verfasst: 03.11.2004 11:17
von pvmichael
Hallo Danilo,

Danke! Das ist wohl die Ursache, jetzt wo Du es sagst, ist es auch irgendwie logisch :oops:
Danilo hat geschrieben: Vielleicht solltest Du es genau andersrum machen: Fenster
in Hauptschleife, OpenNetworkConnection in einen Thread.
Das wollte ich vorerst vermeiden, da ich mehrere OpenNetworkConnection's simultan durchführen möchte, und da hab ich (noch) Probleme beim feststellen, welche Connection erfolgreich war und welche nicht.

Grüsse

Michael