Warum wird der Thread angehalten?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
pvmichael
Beiträge: 144
Registriert: 29.08.2004 17:59
Wohnort: Rosenheim
Kontaktdaten:

Warum wird der Thread angehalten?

Beitrag 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
Benutzeravatar
pvmichael
Beiträge: 144
Registriert: 29.08.2004 17:59
Wohnort: Rosenheim
Kontaktdaten:

Beitrag 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.
Max.
Beiträge: 58
Registriert: 29.08.2004 13:19

Beitrag 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.
AMD XP 2400+ · 1 GB RAM · Radeon 9800 Pro · Win XP SP1 · IE 6.0
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag 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.
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
pvmichael
Beiträge: 144
Registriert: 29.08.2004 17:59
Wohnort: Rosenheim
Kontaktdaten:

Beitrag 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.
Benutzeravatar
Hoto
Beiträge: 294
Registriert: 01.09.2004 22:51

Beitrag 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...
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag 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.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
pvmichael
Beiträge: 144
Registriert: 29.08.2004 17:59
Wohnort: Rosenheim
Kontaktdaten:

Beitrag 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]
Benutzeravatar
pvmichael
Beiträge: 144
Registriert: 29.08.2004 17:59
Wohnort: Rosenheim
Kontaktdaten:

Beitrag 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
Antworten