Seite 1 von 1

Thread per ProcedureReturn verlassen erlaubt?

Verfasst: 15.07.2021 23:22
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

Re: Thread per ProcedureReturn verlassen erlaubt?

Verfasst: 16.07.2021 00:54
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

Re: Thread per ProcedureReturn verlassen erlaubt?

Verfasst: 16.07.2021 16:08
von Regenduft
Vielen Dank für die fundierte Antwort! Damit ist alles geklärt.