¿Es posible dar un nombre a boost::thread
para que las tablas de depuración y los registros de bloqueo puedan ser más legibles? ¿Cómo?Darle un nombre a un hilo de impulso?
Respuesta
Necesitará acceder a la primitiva de subproceso subyacente y asignar un nombre de una manera dependiente del sistema. Los registros de depuración y bloqueo dependen intrínsecamente del sistema y boost :: thread trata más sobre la dependencia del sistema, es decir, sobre la portabilidad.
Parece (http://www.boost.org/doc/libs/1_43_0/doc/html/thread.html) que no hay una forma documentada de acceder a los recursos subyacentes del sistema para una cadena de impulso. (Pero nunca he utilizado yo mismo, así que puede perder algo.)
Editar: (Como David escribe en el comentario) http://www.boost.org/doc/libs/1_43_0/doc/html/thread/thread_management.html#thread.thread_management.thread.nativehandle
estoy usando impulso 1.50.0 en Win32 + VS2010 y thread::native_handle
contiene el número de que no logré emparejar con nada en el sistema. Por otro lado, el método thread::get_id()
devuelve directamente el ID del hilo de Windows en forma de una cadena hexadecimal. Sin embargo, tenga en cuenta que el valor devuelto es específico de la plataforma. El siguiente código funciona en Boost 1.50.0 + Win32 + VS2010. Partes de código de reutilizar msdn
const DWORD MS_VC_EXCEPTION = 0x406D1388;
#pragma pack(push, 8)
typedef struct THREADNAME_INFO {
DWORD dwType; // Must be 0x1000.
LPCSTR szName; // Pointer to name (in user addr space).
DWORD dwThreadID; // Thread ID (-1=caller thread).
DWORD dwFlags; // Reserved for future use, must be zero.
} THREADNAME_INFO;
#pragma pack(pop)
void _SetThreadName(DWORD threadId, const char* threadName) {
THREADNAME_INFO info;
info.dwType = 0x1000;
info.szName = threadName;
info.dwThreadID = threadId;
info.dwFlags = 0;
__try {
RaiseException(MS_VC_EXCEPTION, 0, sizeof(info)/sizeof(ULONG_PTR), (ULONG_PTR*)&info);
}
__except(EXCEPTION_EXECUTE_HANDLER) {
}
}
void SetThreadName(boost::thread::id threadId, std::string threadName) {
// convert string to char*
const char* cchar = threadName.c_str();
// convert HEX string to DWORD
unsigned int dwThreadId;
std::stringstream ss;
ss << std::hex << threadId;
ss >> dwThreadId;
// set thread name
_SetThreadName((DWORD)dwThreadId, cchar);
}
llamada así:
boost::thread* thr = new boost::thread(boost::bind(...));
SetThreadName(thr->get_id(), "MyName");
Falta la estructura 'THREADNAME_INFO' y' MS_VC_EXCEPTION'. ¿No hay mejor forma de obtener el número del boost :: thread :: id? eek. – David
Lo siento, no tengo idea de cómo sucedió, debería estar completo ahora. En cuanto al número de hilo, no sé. Los documentos de Boost dicen que no hay forma de ... – Odin
puede obtener el id. Del hilo al pasar GetThreadId (en
- 1. hilo impulso destruye polimorfismo
- 2. ¿Cómo dar nombre a un hilo invocable?
- 3. ¿Por qué no puedo darle un nombre diferente a la clase que el nombre del archivo?
- 4. impulso :: hilo dentro de una clase
- 5. Nombre del hilo de un AsyncTask
- 6. ¿Cómo puedo darle a mi aplicación Java un nombre de proceso único?
- 7. Cómo discrimina un impulso cancelado de un impulso reactivado deadline_timer
- 8. iteración a través de un impulso :: dynamic_bitset
- 9. ¿Es posible darle estilo a un cuadro de selección?
- 10. ¿Puedes darle a la aplicación Django un nombre detallado para usar en todo el administrador?
- 11. ¿Es posible registrar un ensamblado .NET como COM sin darle un nombre fuerte?
- 12. ¿Hay un impulso :: weak_intrusive_pointer?
- 13. pasando parámetros a un hilo
- 14. ¿Es posible dar un nombre temporal a un hilo del grupo de subprocesos?
- 15. ¿Cómo establecer el nombre de un hilo de Win32?
- 16. ¿Cómo obtener el nombre de un hilo Win32?
- 17. mejor manera de enviar un mensaje a un hilo
- 18. Cambio de nombre de hilo
- 19. especificar el nombre de un hilo cuando se utiliza Task.StartNew
- 20. Python Subprocess.Popen a partir de un hilo
- 21. agregar vértices personalizados a un gráfico de impulso
- 22. escribir un impulso :: multi_array a HDF5 conjunto de datos
- 23. ¿Puedo ejecutar un hilo dentro de un hilo en java?
- 24. ¿Cómo puedo darle a un elemento WPF un borde 3D plano rectangular?
- 25. Crear un subconjunto de bibliotecas de impulso
- 26. rellenando un vector o matriz de impulso
- 27. ¿Cómo pasar un puntero de interfaz a un hilo?
- 28. ¿Cómo darle sentido a este resultado?
- 29. impulso y un único subproceso de eventos basado en modelos
- 30. ¿Necesitas unirte a un hilo cancelado? (pthreads)
+1, 'impulso :: thread' tiene un método' native_handle' que se puede utilizar para recuperar el identificador API nativa de la hilo. Debería profundizar en la biblioteca de subprocesos para saber cuál es el tipo particular que devuelve y la documentación de API sobre cómo usar ese identificador para darle un nombre ... –
Para Linux: http://stackoverflow.com/questions/778085/how-to-name-a-thread-in-linux – moala
Para Windows: http://stackoverflow.com/questions/905876/how-to-set-name-to-a-win32-thread – moala