windows-nt/Source/XPSP1/NT/shell/lib/generic/thread.h
2020-09-26 16:20:57 +08:00

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_ */