Seite 1 von 2

ermitteln, welcher Thread auf Prozedur zugreift

Verfasst: 22.09.2014 20:44
von SBond
Hallo Leute,

kann man herausfinden, welcher Thread auf auf eine Prozedur zugreift? Dabei spielt es keine Rolle, ob es der Hauptthread ist oder irgend ein anderer. Ich bräuchte nur so eine Art ID, um verschiedene Threads voneinander zu unterscheiden.

Ich habe folgendes vor....
Damit ich später mögliche Programmfehler besser lokalisieren kann (während der Laufzeit), entwerfe ich ein Logging-System. Dabei werden in die Logdatenbank verschiedene Daten über den Programmablauf protokolliert. Unter anderem soll es möglich sein, Prozeduraufrufe rekursiv zu verfolgen.

vereinfachtes fiktives Log-Beispiel:

Code: Alles auswählen

Prozedur A gestartet
Prozedur B gestartet
Prozedur C gestartet
Prozedur D gestartet
Prozedur D beendet: Erfolgreich
Prozedur E gestartet
Prozedur E beendet: Erfolgreich
Prozedur C beendet: Erfolgreich
Prozedur B beendet: Fehler
Prozedur A beendet: Fehler
Prozedur X gestartet
Prozedur Y gestartet
Prozedur Y beendet: Erfolgreich
Prozedur X beendet: Erfolgreich
daraus könnte ich nun eine Baumansicht erstellen:

Code: Alles auswählen

Prozedur A: Fehler
     Prozedur B: Fehler
          Prozedur C: Erfolgreich
               Prozedur D: Erfolgreich
               Prozedur E: Erfolgreich

Prozedur X: Erfolgreich
     Prozedur Y: Erfolgreich
so kann man schön sehen, welche Prozeduren von einer Programmfunktion (hier z.B. 'Prozedur A' oder 'Prozedur X') aufgerufen werden.

....Problem bei dieser Methode ist, dass bei mehreren Threads die Verarbeitung durcheinander geraten wird. So könnte z.B. 'Prozedur A' in der Logausgabe mehrfach geöffnet oder geschlossen werden. Um das zu verhindern würde ich noch eine Art Thread-ID hinzufügen, damit immer eindeutig ist, welcher Thread gerade welche Log-Nachricht gesendet hat.


Ist das möglich eine Thread-ID oder irgend ein handle zu ermitteln, um eine Eindeutigkeit zu erreichen?

viele Grüße,
SBond

Re: ermitteln, welcher Thread auf Prozedur zugreift

Verfasst: 22.09.2014 20:49
von RSBasic
Ich weiß nicht, ob du sowas suchst, aber reicht dir die Speicheradresse (@Proc()) aus?
Bei Threads gibts ja auch ThreadID().

Re: ermitteln, welcher Thread auf Prozedur zugreift

Verfasst: 22.09.2014 21:21
von SBond
das schwierige daran ist, dass ich diese Information aus der laufenden Prozedur abgreifen wollte:

einfaches Beispiel:

Code: Alles auswählen

Enumeration
	#Gestartet
	#Beendet
EndEnumeration

Procedure LogMsg(Prozedurname.s, ThreadID.i, Status.i)
	
	Protected Statustext.s = ""
	
	Select Status
	Case #Gestartet: Statustext = "gestartet!"
	Case #Beendet: Statustext = "beendet!"
	EndSelect

	Debug  "Prozedurname: " + Prozedurname + "   Thread-ID: " + Str(ThreadID) + "   Nachricht: " + Statustext
	
EndProcedure


Procedure Funktion_C ()
	LogMsg(#PB_Compiler_Procedure, 0, #Gestartet)
;   ...irgendwas
	LogMsg(#PB_Compiler_Procedure, 0, #Beendet)
EndProcedure


Procedure Funktion_B ()
	LogMsg(#PB_Compiler_Procedure, 0, #Gestartet)
;   ...irgendwas
	Funktion_C ()
;   ...irgendwas
	LogMsg(#PB_Compiler_Procedure, 0, #Beendet)
EndProcedure


Procedure Funktion_A ()
	LogMsg(#PB_Compiler_Procedure, 0, #Gestartet)
;   ...irgendwas
	Funktion_B ()
;   ...irgendwas
	LogMsg(#PB_Compiler_Procedure, 0, #Beendet)
EndProcedure


Funktion_A ()
Der zweite Parameter in LogMsg(), der überall 0 ist, soll eine ID bekommen.
...es ist recht schwierig. Wenn ein Thread z.B. Funktion_A () startet, dann soll rekursiv für alle Prozeduren die gleiche 'Thread-ID' verwendet werden. Startet währendessen ein anderer Threat auch die Funktion_A (), soll muss dieser Thread eine andere 'Thread-ID' rekursiv verwenden.

ich könnte natürlich stumpf jede Prozedur um einen Parameter erweitern, in dem ich immer eine ID von der nennen wir es mal 'Parent-Prozedur' weiterreiche, aber das wäre nicht wirklich toll :(

Re: ermitteln, welcher Thread auf Prozedur zugreift

Verfasst: 22.09.2014 21:30
von RSBasic
SBond hat geschrieben:ich könnte natürlich stumpf jede Prozedur um einen Parameter erweitern, in dem ich immer eine ID von der nennen wir es mal 'Parent-Prozedur' weiterreiche, aber das wäre nicht wirklich toll :(
Du kannst die Parameterlistenänderung mit Hilfe eines Macros erledigen. Wenn du es nicht mehr benötigst, dann kommentierst du dein Macro einfach aus, ohne an vielen Stellen ändern zu müssen.

Re: ermitteln, welcher Thread auf Prozedur zugreift

Verfasst: 22.09.2014 21:47
von GPI
Also mit Windows gehts:
http://msdn.microsoft.com/en-us/library ... 85%29.aspx

Code: Alles auswählen

Procedure test()
  ;x=GetCurrentThread_()
  
  Debug "test von "+Hex(GetCurrentThreadId_())
EndProcedure

Procedure mythread(dummy)
  Debug "my Threadid:"+Hex(GetCurrentThreadId_())
  Delay(100+Random(200))
  test()
  Delay(1000)
EndProcedure

Debug "main:"
test()
Debug "--------"

For i=0 To 10
  a=CreateThread(@mythread(),0)
  Debug "newhtread (passt leider nicht):"+Hex(a)+", "+Hex(ThreadID(a))
  Delay(100)
  
Next
Delay(2000)
Debug "end"

Re: ermitteln, welcher Thread auf Prozedur zugreift

Verfasst: 22.09.2014 21:53
von SBond
ich denke, dass ist genau das richtige.

ich danke euch für eure Hilfe :)

Re: ermitteln, welcher Thread auf Prozedur zugreift

Verfasst: 23.09.2014 00:29
von NicTheQuick
Wenn man ohne API arbeiten will, kann man vielleicht etwas mit Threaded basteln.

Code: Alles auswählen

Global.i currentThreadId.i, currentThreadIdLock.i = CreateMutex()
Procedure.i getNewThreadId()
	Protected newId.i
	
	LockMutex(currentThreadIdLock)
	newId = currentThreadId
	currentThreadId + 1
	UnlockMutex(currentThreadIdLock)
	
	ProcedureReturn newId
EndProcedure


Threaded threadId.i
threadId = getNewThreadId()

Procedure a()
	Debug "Thread " + threadId + ": Begin " + #PB_Compiler_Procedure
	Delay(Random(100, 10))
	Debug "Thread " + threadId + ": End " + #PB_Compiler_Procedure
EndProcedure

Procedure thread(dummy.i)
	threadId = getNewThreadId()
	Debug "Thread " + threadId + " started."
	
	Delay(100)
	
	a()
	
	Debug "Thread " + threadId + " finished."
EndProcedure

Debug "Main thread has id " + threadId

CreateThread(@thread(), 0)
CreateThread(@thread(), 0)
CreateThread(@thread(), 0)
CreateThread(@thread(), 0)

Delay(3000)

Re: ermitteln, welcher Thread auf Prozedur zugreift

Verfasst: 23.09.2014 10:36
von helpy
Die Idee von NicTheQuick etwas erweitert:

Modul modDBG.pbi:

Code: Alles auswählen

DeclareModule DBG
  EnableExplicit
  
	Macro MSG(__msg__)
		CompilerIf #PB_Compiler_Module <> ""
			CompilerIf #PB_Compiler_Procedure <> ""
				DBG::DebugOut(#PB_Compiler_Module+"::"+#PB_Compiler_Procedure, __msg__)
			CompilerElse
				DBG::DebugOut(#PB_Compiler_Module+"::@GLOBAL", __msg__)
			CompilerEndIf
		CompilerElse
			CompilerIf #PB_Compiler_Procedure <> ""
				DBG::DebugOut(#PB_Compiler_Procedure, __msg__)
			CompilerElse
				DBG::DebugOut("@GLOBAL", __msg__)
			CompilerEndIf
		CompilerEndIf
	EndMacro
	
	Macro InitThread()
	  CompilerIf #PB_Compiler_Thread = #False
	    CompilerError "Compiler option 'Create threadsafe executeables' is not enabled!"
	  CompilerEndIf
		DBG::NewThread( #PB_Compiler_Module, #PB_Compiler_Procedure )
	EndMacro
	
	Declare DebugOut( Scope.s, Message.s )
	Declare NewThread( ModuleName.s, ProcedureName.s )
EndDeclareModule

Module DBG
	EnableExplicit
	
	Global   Thread_Count.i, Mutex.i
	Threaded Thread_ID.i
	Threaded Thread_Name.s
	
	Procedure DebugOut( Scope.s, Message.s )
	  If Thread_Name <> ""
	    Debug FormatDate( "%yyyy-%mm-%dd %hh:%ii:%ss", Date() ) + " Thread>>" + Thread_Name + " Scope>>" + Scope + " " + Message
	  Else
	    Debug FormatDate( "%yyyy-%mm-%dd %hh:%ii:%ss", Date() ) + " Scope>>" + Scope + " " + Message
	  EndIf
	EndProcedure
	
	Procedure NewThread( ModuleName.s, ProcedureName.s )
		If Not Mutex
			Mutex = CreateMutex()
		EndIf
		
		If Not Thread_ID
			LockMutex(Mutex)
			Thread_Count + 1
			Thread_ID = Thread_Count
			UnlockMutex(Mutex)
			
			If ModuleName <> ""
				Thread_Name + ModuleName + "::"
			EndIf
			
			If ProcedureName <> ""
				Thread_Name + ProcedureName
			Else
				Thread_Name + "@GLOBAL"
			EndIf
			
			Thread_Name + "-" + RSet( Str(Thread_ID), 5, "0" )
		EndIf
	EndProcedure
EndModule
Testprogramm:

Code: Alles auswählen

XIncludeFile "modDBG.pbi"
DBG::InitThread() ; main thread

Procedure ProcedureA()
  DBG::MSG( "begin" )
  Delay(Random(250, 10))
  DBG::MSG( "end" )
EndProcedure

Procedure ProcedureB()
  DBG::MSG( "begin" )
  Delay(Random(250, 10))
  DBG::MSG( "end" )
EndProcedure

Procedure Thread_A(dummy.i)
  DBG::InitThread()
  DBG::MSG( "started" )
  
  Delay(100)
  ProcedureA()
  
  Delay(100)
  ProcedureB()
  
  DBG::MSG( "finished" )
EndProcedure

Procedure Thread_B(dummy.i)
  DBG::InitThread()
  DBG::MSG( "started" )
  
  Delay(100)
  ProcedureA()
  
  Delay(100)
  ProcedureB()
  
  DBG::MSG( "finished" )
EndProcedure

DBG::MSG( "Start creating threads ..." )

CreateThread(@Thread_A(), 0)
CreateThread(@Thread_A(), 0)
CreateThread(@Thread_A(), 0)
CreateThread(@Thread_A(), 0)

CreateThread(@Thread_B(), 0)
CreateThread(@Thread_B(), 0)
CreateThread(@Thread_B(), 0)
CreateThread(@Thread_B(), 0)

DBG::MSG( "Finished creating threads ..." )

ProcedureA()
ProcedureB()


Delay(2000)

ProcedureA()
ProcedureB()

DBG::MSG( "Finished global test!" )

Debug ""
Debug ""

DeclareModule Application
  EnableExplicit
  DBG::MSG( "DeclareModule Application" )
  
  Declare Main()
  ;}
  
  DBG::MSG( "EndDeclareModule Application" )
EndDeclareModule
End Application::Main()

Module Application
  EnableExplicit
  DBG::MSG( "Module Application" )
  
  ;{ Private procedures
  Procedure ProcedureA()
    DBG::MSG( "begin" )
    Delay(Random(250, 10))
    DBG::MSG( "end" )
  EndProcedure
  
  Procedure ProcedureB()
    DBG::MSG( "begin" )
    Delay(Random(250, 10))
    DBG::MSG( "end" )
  EndProcedure
  
  Procedure Thread_A(dummy.i)
    DBG::InitThread()
    DBG::MSG( "started" )
    
    Delay(100)
    ProcedureA()
    
    Delay(100)
    ProcedureB()
    
    DBG::MSG( "finished" )
  EndProcedure
  
  Procedure Thread_B(dummy.i)
    DBG::InitThread()
    DBG::MSG( "started" )
    
    Delay(100)
    ProcedureA()
    
    Delay(100)
    ProcedureB()
    
    DBG::MSG( "finished" )
  EndProcedure
  ;}
  
  ;{ Public procedures
  Procedure Main()
    DBG::MSG( "Start creating threads inside module ..." )
    
    CreateThread(@Thread_A(), 0)
    CreateThread(@Thread_A(), 0)
    CreateThread(@Thread_A(), 0)
    CreateThread(@Thread_A(), 0)
    
    CreateThread(@Thread_B(), 0)
    CreateThread(@Thread_B(), 0)
    CreateThread(@Thread_B(), 0)
    CreateThread(@Thread_B(), 0)
    
    DBG::MSG( "Finished creating threads ..." )
    
    ProcedureA()
    ProcedureB()
    
    
    Delay(2000)
    
    ProcedureA()
    ProcedureB()
    
    DBG::MSG( "Finished test inside module!" )
  EndProcedure
  ;}
  
  DBG::MSG( "EndModule Application" )
EndModule
Ein erstes Ergebnis:

Code: Alles auswählen

2014-09-23 10:40:37 Thread>>@GLOBAL-00001 Scope>>@GLOBAL Start creating threads ...
2014-09-23 10:40:37 Thread>>Thread_A-00002 Scope>>Thread_A started
2014-09-23 10:40:37 Thread>>Thread_A-00003 Scope>>Thread_A started
2014-09-23 10:40:37 Thread>>Thread_A-00004 Scope>>Thread_A started
2014-09-23 10:40:37 Thread>>Thread_A-00005 Scope>>Thread_A started
2014-09-23 10:40:37 Thread>>Thread_B-00006 Scope>>Thread_B started
2014-09-23 10:40:37 Thread>>Thread_B-00007 Scope>>Thread_B started
2014-09-23 10:40:37 Thread>>Thread_B-00008 Scope>>Thread_B started
2014-09-23 10:40:37 Thread>>@GLOBAL-00001 Scope>>@GLOBAL Finished creating threads ...
2014-09-23 10:40:37 Thread>>@GLOBAL-00001 Scope>>ProcedureA begin
2014-09-23 10:40:37 Thread>>Thread_B-00009 Scope>>Thread_B started
2014-09-23 10:40:37 Thread>>@GLOBAL-00001 Scope>>ProcedureA end
2014-09-23 10:40:37 Thread>>@GLOBAL-00001 Scope>>ProcedureB begin
2014-09-23 10:40:37 Thread>>@GLOBAL-00001 Scope>>ProcedureB end
2014-09-23 10:40:37 Thread>>Thread_B-00008 Scope>>ProcedureA begin
2014-09-23 10:40:37 Thread>>Thread_A-00004 Scope>>ProcedureA begin
2014-09-23 10:40:37 Thread>>Thread_A-00003 Scope>>ProcedureA begin
2014-09-23 10:40:37 Thread>>Thread_B-00007 Scope>>ProcedureA begin
2014-09-23 10:40:37 Thread>>Thread_A-00005 Scope>>ProcedureA begin
2014-09-23 10:40:37 Thread>>Thread_A-00002 Scope>>ProcedureA begin
2014-09-23 10:40:37 Thread>>Thread_B-00006 Scope>>ProcedureA begin
2014-09-23 10:40:37 Thread>>Thread_B-00009 Scope>>ProcedureA begin
2014-09-23 10:40:37 Thread>>Thread_A-00005 Scope>>ProcedureA end
2014-09-23 10:40:37 Thread>>Thread_A-00003 Scope>>ProcedureA end
2014-09-23 10:40:37 Thread>>Thread_A-00004 Scope>>ProcedureA end
2014-09-23 10:40:38 Thread>>Thread_B-00009 Scope>>ProcedureA end
2014-09-23 10:40:38 Thread>>Thread_B-00006 Scope>>ProcedureA end
2014-09-23 10:40:38 Thread>>Thread_A-00005 Scope>>ProcedureB begin
2014-09-23 10:40:38 Thread>>Thread_B-00007 Scope>>ProcedureA end
2014-09-23 10:40:38 Thread>>Thread_A-00003 Scope>>ProcedureB begin
2014-09-23 10:40:38 Thread>>Thread_A-00004 Scope>>ProcedureB begin
2014-09-23 10:40:38 Thread>>Thread_A-00003 Scope>>ProcedureB end
2014-09-23 10:40:38 Thread>>Thread_A-00003 Scope>>Thread_A finished
2014-09-23 10:40:38 Thread>>Thread_A-00004 Scope>>ProcedureB end
2014-09-23 10:40:38 Thread>>Thread_A-00004 Scope>>Thread_A finished
2014-09-23 10:40:38 Thread>>Thread_B-00008 Scope>>ProcedureA end
2014-09-23 10:40:38 Thread>>Thread_A-00002 Scope>>ProcedureA end
2014-09-23 10:40:38 Thread>>Thread_B-00009 Scope>>ProcedureB begin
2014-09-23 10:40:38 Thread>>Thread_B-00006 Scope>>ProcedureB begin
2014-09-23 10:40:38 Thread>>Thread_B-00007 Scope>>ProcedureB begin
2014-09-23 10:40:38 Thread>>Thread_B-00009 Scope>>ProcedureB end
2014-09-23 10:40:38 Thread>>Thread_B-00009 Scope>>Thread_B finished
2014-09-23 10:40:38 Thread>>Thread_B-00007 Scope>>ProcedureB end
2014-09-23 10:40:38 Thread>>Thread_B-00007 Scope>>Thread_B finished
2014-09-23 10:40:38 Thread>>Thread_B-00008 Scope>>ProcedureB begin
2014-09-23 10:40:38 Thread>>Thread_A-00002 Scope>>ProcedureB begin
2014-09-23 10:40:38 Thread>>Thread_A-00005 Scope>>ProcedureB end
2014-09-23 10:40:38 Thread>>Thread_A-00005 Scope>>Thread_A finished
2014-09-23 10:40:38 Thread>>Thread_B-00006 Scope>>ProcedureB end
2014-09-23 10:40:38 Thread>>Thread_B-00006 Scope>>Thread_B finished
2014-09-23 10:40:38 Thread>>Thread_A-00002 Scope>>ProcedureB end
2014-09-23 10:40:38 Thread>>Thread_A-00002 Scope>>Thread_A finished
2014-09-23 10:40:38 Thread>>Thread_B-00008 Scope>>ProcedureB end
2014-09-23 10:40:38 Thread>>Thread_B-00008 Scope>>Thread_B finished
2014-09-23 10:40:39 Thread>>@GLOBAL-00001 Scope>>ProcedureA begin
2014-09-23 10:40:39 Thread>>@GLOBAL-00001 Scope>>ProcedureA end
2014-09-23 10:40:39 Thread>>@GLOBAL-00001 Scope>>ProcedureB begin
2014-09-23 10:40:40 Thread>>@GLOBAL-00001 Scope>>ProcedureB end
2014-09-23 10:40:40 Thread>>@GLOBAL-00001 Scope>>@GLOBAL Finished global test!


2014-09-23 10:40:40 Thread>>@GLOBAL-00001 Scope>>Application::@GLOBAL DeclareModule Application
2014-09-23 10:40:40 Thread>>@GLOBAL-00001 Scope>>Application::@GLOBAL EndDeclareModule Application
2014-09-23 10:40:40 Thread>>@GLOBAL-00001 Scope>>Application::Main Start creating threads inside module ...
2014-09-23 10:40:40 Thread>>Application::Thread_A-00010 Scope>>Application::Thread_A started
2014-09-23 10:40:40 Thread>>Application::Thread_A-00011 Scope>>Application::Thread_A started
2014-09-23 10:40:40 Thread>>Application::Thread_A-00012 Scope>>Application::Thread_A started
2014-09-23 10:40:40 Thread>>Application::Thread_A-00013 Scope>>Application::Thread_A started
2014-09-23 10:40:40 Thread>>Application::Thread_B-00014 Scope>>Application::Thread_B started
2014-09-23 10:40:40 Thread>>Application::Thread_B-00015 Scope>>Application::Thread_B started
2014-09-23 10:40:40 Thread>>Application::Thread_B-00016 Scope>>Application::Thread_B started
2014-09-23 10:40:40 Thread>>@GLOBAL-00001 Scope>>Application::Main Finished creating threads ...
2014-09-23 10:40:40 Thread>>Application::Thread_B-00017 Scope>>Application::Thread_B started
2014-09-23 10:40:40 Thread>>@GLOBAL-00001 Scope>>Application::ProcedureA begin
2014-09-23 10:40:40 Thread>>Application::Thread_A-00012 Scope>>Application::ProcedureA begin
2014-09-23 10:40:40 Thread>>Application::Thread_A-00011 Scope>>Application::ProcedureA begin
2014-09-23 10:40:40 Thread>>Application::Thread_A-00010 Scope>>Application::ProcedureA begin
2014-09-23 10:40:40 Thread>>Application::Thread_A-00013 Scope>>Application::ProcedureA begin
2014-09-23 10:40:40 Thread>>Application::Thread_B-00014 Scope>>Application::ProcedureA begin
2014-09-23 10:40:40 Thread>>Application::Thread_B-00015 Scope>>Application::ProcedureA begin
2014-09-23 10:40:40 Thread>>Application::Thread_B-00017 Scope>>Application::ProcedureA begin
2014-09-23 10:40:40 Thread>>Application::Thread_B-00016 Scope>>Application::ProcedureA begin
2014-09-23 10:40:40 Thread>>Application::Thread_A-00013 Scope>>Application::ProcedureA end
2014-09-23 10:40:40 Thread>>Application::Thread_A-00011 Scope>>Application::ProcedureA end
2014-09-23 10:40:40 Thread>>@GLOBAL-00001 Scope>>Application::ProcedureA end
2014-09-23 10:40:40 Thread>>@GLOBAL-00001 Scope>>Application::ProcedureB begin
2014-09-23 10:40:40 Thread>>Application::Thread_A-00012 Scope>>Application::ProcedureA end
2014-09-23 10:40:40 Thread>>Application::Thread_A-00013 Scope>>Application::ProcedureB begin
2014-09-23 10:40:40 Thread>>Application::Thread_A-00011 Scope>>Application::ProcedureB begin
2014-09-23 10:40:40 Thread>>Application::Thread_B-00017 Scope>>Application::ProcedureA end
2014-09-23 10:40:40 Thread>>Application::Thread_B-00014 Scope>>Application::ProcedureA end
2014-09-23 10:40:40 Thread>>Application::Thread_A-00013 Scope>>Application::ProcedureB end
2014-09-23 10:40:40 Thread>>Application::Thread_A-00013 Scope>>Application::Thread_A finished
2014-09-23 10:40:40 Thread>>Application::Thread_A-00010 Scope>>Application::ProcedureA end
2014-09-23 10:40:40 Thread>>Application::Thread_A-00012 Scope>>Application::ProcedureB begin
2014-09-23 10:40:40 Thread>>Application::Thread_B-00015 Scope>>Application::ProcedureA end
2014-09-23 10:40:40 Thread>>@GLOBAL-00001 Scope>>Application::ProcedureB end
2014-09-23 10:40:40 Thread>>Application::Thread_B-00016 Scope>>Application::ProcedureA end
2014-09-23 10:40:40 Thread>>Application::Thread_B-00017 Scope>>Application::ProcedureB begin
2014-09-23 10:40:40 Thread>>Application::Thread_A-00011 Scope>>Application::ProcedureB end
2014-09-23 10:40:40 Thread>>Application::Thread_A-00011 Scope>>Application::Thread_A finished
2014-09-23 10:40:40 Thread>>Application::Thread_B-00014 Scope>>Application::ProcedureB begin
2014-09-23 10:40:40 Thread>>Application::Thread_A-00010 Scope>>Application::ProcedureB begin
2014-09-23 10:40:40 Thread>>Application::Thread_B-00017 Scope>>Application::ProcedureB end
2014-09-23 10:40:40 Thread>>Application::Thread_B-00017 Scope>>Application::Thread_B finished
2014-09-23 10:40:40 Thread>>Application::Thread_B-00015 Scope>>Application::ProcedureB begin
2014-09-23 10:40:40 Thread>>Application::Thread_B-00016 Scope>>Application::ProcedureB begin
2014-09-23 10:40:40 Thread>>Application::Thread_B-00015 Scope>>Application::ProcedureB end
2014-09-23 10:40:40 Thread>>Application::Thread_B-00015 Scope>>Application::Thread_B finished
2014-09-23 10:40:40 Thread>>Application::Thread_B-00014 Scope>>Application::ProcedureB end
2014-09-23 10:40:40 Thread>>Application::Thread_B-00014 Scope>>Application::Thread_B finished
2014-09-23 10:40:40 Thread>>Application::Thread_A-00012 Scope>>Application::ProcedureB end
2014-09-23 10:40:40 Thread>>Application::Thread_A-00012 Scope>>Application::Thread_A finished
2014-09-23 10:40:40 Thread>>Application::Thread_A-00010 Scope>>Application::ProcedureB end
2014-09-23 10:40:40 Thread>>Application::Thread_A-00010 Scope>>Application::Thread_A finished
2014-09-23 10:40:40 Thread>>Application::Thread_B-00016 Scope>>Application::ProcedureB end
2014-09-23 10:40:40 Thread>>Application::Thread_B-00016 Scope>>Application::Thread_B finished
2014-09-23 10:40:42 Thread>>@GLOBAL-00001 Scope>>Application::ProcedureA begin
2014-09-23 10:40:42 Thread>>@GLOBAL-00001 Scope>>Application::ProcedureA end
2014-09-23 10:40:42 Thread>>@GLOBAL-00001 Scope>>Application::ProcedureB begin
2014-09-23 10:40:42 Thread>>@GLOBAL-00001 Scope>>Application::ProcedureB end
2014-09-23 10:40:42 Thread>>@GLOBAL-00001 Scope>>Application::Main Finished test inside module!

Re: ermitteln, welcher Thread auf Prozedur zugreift

Verfasst: 23.09.2014 20:50
von SBond
vielen Dank für euren Nachtrag :)

Ich werde es mir morgen mal genauer anschauen, da ich heute nicht mal mehr in der Lage bin, zwei einstellige Zahlen zu addieren :coderselixir:

viele Grüße
SBond

Re: ermitteln, welcher Thread auf Prozedur zugreift

Verfasst: 24.09.2014 07:56
von auser
Würd auch je nach Fall eher eine threaded Variable oder Semaphore nehmen als die ThreadID. Das Problem mit diesen ThreadIDs ist halt daß sie nur so lange eindeutig sind so lange der Thread läuft und danach die selbe ID von 'nem neuen Thread wiederverwendet werden kann. Das kann sowohl beim Prüfen ob der Thread noch läuft als auch beim Logging oder Debuggen zu Missverständnissen führen.