|
// Worker Thread
//
#include "stdafx.h"
#include "WorkerThread.h"
DWORD WINAPI ThreadProc( LPVOID lpParameter )
{
HANDLE hWorkerThread = NULL; // Mirroring Stack Structure
DWORD dwProcessID = 0; // of the code which
DWORD dwPrimaryThreadID = 0; // executes main()
DWORD dwWorkerThreadID = 0; //
DWORD dwCurrentThreadID = 0; //
DWORD dwLandingArea = NULL; //
// The only variables of interest
// for this thread
DWORD dwExitAddress = NULL;
dwWorkerThreadID = GetCurrentThreadId();
// Sleep to allow syncronization for the Debugger
// Not required in Real Life...
Sleep( 1000 * 10 );
if( NULL == lpParameter )
{
return -2;
}
dwExitAddress = * ( reinterpret_cast< DWORD* > ( lpParameter ) );
__asm {
push RETURNAREA
push dwExitAddress
ret
}
RETURNAREA:
std::tcout << _T("Exiting worker function thread ID = 0x");
HEXADECIMAL_OUTPUT(4);
std::tcout << dwCurrentThreadID << std::endl;
return 2;
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.