Thread per ProcedureReturn verlassen erlaubt?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Regenduft
Beiträge: 574
Registriert: 25.03.2008 15:07
Wohnort: THE LÄÄÄND!

Thread per ProcedureReturn verlassen erlaubt?

Beitrag von Regenduft »

Hallo beisammen,

ist es eigentlich "erlaubt" (d.h. sicher) einen Thread mit ProcedureReturn zu verlassen?

Code: Alles auswählen

Procedure Thread(x)
  
  ; [ ...Code... ]
  
  If x = 1
    Debug "vorzeitiges Beenden des Threads"
    ProcedureReturn
  EndIf
  
  ; [ ...Code... ]
  
  Debug "reguläres Beenden des Threads"
  
EndProcedure


a = CreateThread(@Thread(), 0)

b = CreateThread(@Thread(), 1)


While IsThread(a) Or IsThread(b)
  Delay(100)
Wend
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
Benutzeravatar
Sicro
Beiträge: 955
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: Thread per ProcedureReturn verlassen erlaubt?

Beitrag von Sicro »

Ja, ProcedureReturn springt zu EndProcedure, nullt den Rückgabewert aber nicht:

Code: Alles auswählen

Procedure Test()
  ProcedureReturn 
EndProcedure

Debug Test()
Gibt bei mir im Beispiel "-1" aus, aber kann auch ein anderer Wert sein.
Da du bei einem Thread sowieso nicht an den ProcedureReturn-Wert drankommst, kann dir das auch egal sein.

Hier die ASM-Ausgabe deiner obigen Procedure:

Code: Alles auswählen

; Procedure Thread(x)
_Procedure0:
  PUSH   r15
  PS0=64
  XOR    rax,rax
  PUSH   rax
  SUB    rsp,40
  MOV    rax,rdi
  MOV    [rsp+40],rax
; 
; 
; 
; If x = 1
  MOV    r15,qword [rsp+40]
  CMP    r15,1
  JNE   _EndIf2
; Debug "vorzeitiges Beenden des Threads"
; ProcedureReturn
  JMP   _EndProcedure1
; EndIf
_EndIf2:
; 
; 
; 
; Debug "regulres Beenden des Threads"
; 
; EndProcedure
_EndProcedureZero1:
  XOR    rax,rax
_EndProcedure1:
  ADD    rsp,48
  POP    r15
  RET
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Benutzeravatar
Regenduft
Beiträge: 574
Registriert: 25.03.2008 15:07
Wohnort: THE LÄÄÄND!

Re: Thread per ProcedureReturn verlassen erlaubt?

Beitrag von Regenduft »

Vielen Dank für die fundierte Antwort! Damit ist alles geklärt.
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
Antworten