threading multitarea hilos entre ejemplos detener comunicacion como multithreading delphi

multithreading - hilos - multitarea en python



Obtener el objeto TThread para el hilo que se está ejecutando actualmente? (6)

Quiero una función como GetCurrentThread que devuelve un objeto TThread del hilo de ejecución actual. Sé que hay una API de Win32 llamada GetCurrentThread, pero devuelve el ID de la cadena. Si existe la posibilidad de obtener TThread objeto de esa ID también está bien.


¿No sería el hilo de ejecución actual del que está intentando ejecutar una función?


A partir de su propia respuesta, parece que tal vez solo quiera "determinar si se ejecuta en el hilo principal o no", en cuyo caso puede simplemente usar

if Windows.GetCurrentThreadId() = System.MainThreadID then // ...

Aunque esto no funcionará desde una DLL creada con Delphi si fue cargada por una cadena de trabajo.


Estoy usando mi propio descendiente TThread que se registra en una lista global, protegido con un candado.

De esta forma, un método en este descendiente puede recorrer la lista y obtener un TThread para dar una identificación.


La última versión de Delphi, Delphi 2009, tiene una propiedad de clase CurrentThread en la clase TThread.

Esto devolverá el objeto de subproceso adecuado de Delphi si es un subproceso nativo. Si el hilo es un hilo "extraño", es decir, creado utilizando algún otro mecanismo o en una devolución de llamada de un hilo de un tercero, entonces creará un hilo envoltorio alrededor del mango del hilo.


Puede almacenar el puntero de la instancia TThread en el contexto del subproceso actual a través de la llamada API TlsSetValue y luego recuperarlo utilizando TlsGetValue . Sin embargo, tenga en cuenta que esto solo funcionará si está tratando de recuperar / almacenar la instancia TThread del hilo actual .


Respondiendo mi propia pregunta. Supongo que no es posible obtener TThread objeto de ID. Es posible mediante el uso de una variable global. Luego, al comparar su identificador de identificador y el identificador de subproceso actual, uno puede determinar si se está ejecutando en el subproceso principal o no.