68 lines
1.7 KiB
C++
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)
|
|
{
|
|
}
|
|
};
|
|
//**********************************************************************************************
|