utiles_v2017/_proceso.cpp

68 lines
1.7 KiB
C++

#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)
{
}
};
//**********************************************************************************************