69 lines
2.8 KiB
C
69 lines
2.8 KiB
C
|
// --------------------------------------------------------------------------
|
||
|
// Module Name: Thread.h
|
||
|
//
|
||
|
// Copyright (c) 1999-2000, Microsoft Corporation
|
||
|
//
|
||
|
// Base class that implements thread functionality. Subclass this class and
|
||
|
// implement the virtual ThreadEntry function. When you instantiate this
|
||
|
// class a thread gets created which will call ThreadEntry and when that
|
||
|
// function exits will call ThreadExit. These objects should be created using
|
||
|
// operator new because the default implementation of ThreadExit does
|
||
|
// "->Release()". You should override this function if you don't want this
|
||
|
// behavior. The threads are also created SUSPENDED. You make any changes
|
||
|
// that are required in the subclass' constructor. At the end of the
|
||
|
// constructor or from the caller of operator new a "->Resume()" can be
|
||
|
// invoked to start the thread.
|
||
|
//
|
||
|
// History: 1999-08-24 vtan created
|
||
|
// 2000-02-01 vtan moved from Neptune to Whistler
|
||
|
// --------------------------------------------------------------------------
|
||
|
|
||
|
#ifndef _Thread_
|
||
|
#define _Thread_
|
||
|
|
||
|
#include "CountedObject.h"
|
||
|
|
||
|
// --------------------------------------------------------------------------
|
||
|
// CThread
|
||
|
//
|
||
|
// Purpose: A base class to manage threads.
|
||
|
//
|
||
|
// History: 1999-08-24 vtan created
|
||
|
// 2000-02-01 vtan moved from Neptune to Whistler
|
||
|
// --------------------------------------------------------------------------
|
||
|
|
||
|
class CThread : public CCountedObject
|
||
|
{
|
||
|
public:
|
||
|
CThread (DWORD stackSpace = 0, DWORD createFlags = 0, HANDLE hToken = NULL);
|
||
|
virtual ~CThread (void);
|
||
|
|
||
|
operator HANDLE (void) const;
|
||
|
|
||
|
bool IsCreated (void) const;
|
||
|
|
||
|
void Suspend (void) const;
|
||
|
void Resume (void) const;
|
||
|
NTSTATUS Terminate (void);
|
||
|
|
||
|
bool IsCompleted (void) const;
|
||
|
DWORD WaitForCompletion (DWORD dwMilliseconds) const;
|
||
|
DWORD GetResult (void) const;
|
||
|
|
||
|
int GetPriority (void) const;
|
||
|
void SetPriority (int newPriority) const;
|
||
|
protected:
|
||
|
virtual DWORD Entry (void) = 0;
|
||
|
virtual void Exit (void);
|
||
|
|
||
|
NTSTATUS SetToken (HANDLE hToken);
|
||
|
private:
|
||
|
static DWORD WINAPI ThreadEntryProc (void *pParameter);
|
||
|
protected:
|
||
|
HANDLE _hThread;
|
||
|
bool _fCompleted;
|
||
|
};
|
||
|
|
||
|
#endif /* _Thread_ */
|
||
|
|