#include "StdAfx.h" #include "_proceso.h" C_proceso::C_proceso(void) { strcpy(nombre, "Proceso sin nombre"); m_thread=NULL; } C_proceso::~C_proceso(void) { join(); } //********************************************************************************************** void C_proceso::run() { } //********************************************************************************************** BOOL C_proceso::lanza( char *nombre/*=NULL*/ ) { if (nombre) strcpy(this->nombre,nombre); m_thread = AfxBeginThread(main_c_proceso, this, THREAD_PRIORITY_NORMAL, 1024, CREATE_SUSPENDED); m_thread->m_bAutoDelete=FALSE; #ifdef _DEBUG SetThreadName(m_thread->m_nThreadID,this->nombre); #endif m_thread->ResumeThread(); return TRUE; } //********************************************************************************************** void C_proceso::join() { if (m_thread == NULL) return; WaitForSingleObject(m_thread->m_hThread,INFINITE); delete m_thread; m_thread = NULL; } //********************************************************************************************** UINT main_c_proceso( LPVOID pp ) { C_proceso *p=(C_proceso*)pp; p->run(); AfxEndThread(0,FALSE); return 0; } //********************************************************************************************** UTILES_EXPORT void SetThreadName( DWORD dwThreadID, char* threadName) { THREADNAME_INFO info; info.dwType = 0x1000; info.szName = threadName; info.dwThreadID = dwThreadID; info.dwFlags = 0; __try { RaiseException( MS_VC_EXCEPTION_PROCESO_UTILES, 0, sizeof(info)/sizeof(ULONG_PTR), (ULONG_PTR*)&info ); } __except(EXCEPTION_EXECUTE_HANDLER) { } }; //**********************************************************************************************