133 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			133 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/*++
 | 
						|
 | 
						|
Copyright (c) 1999-2000 Microsoft Corporation
 | 
						|
 | 
						|
Module Name:
 | 
						|
 | 
						|
    thread_pool.h
 | 
						|
 | 
						|
Abstract:
 | 
						|
 | 
						|
    Public routines for the iisplus worker process thread pool.
 | 
						|
    
 | 
						|
    This thread pool is based on the IIS5 atq implementation.
 | 
						|
 | 
						|
Author:
 | 
						|
 | 
						|
    Taylor Weiss (TaylorW)       12-Jan-2000
 | 
						|
 | 
						|
Revision History:
 | 
						|
 | 
						|
--*/
 | 
						|
 | 
						|
#ifndef _THREAD_POOL_H_
 | 
						|
#define _THREAD_POOL_H_
 | 
						|
 | 
						|
 | 
						|
//
 | 
						|
// ThreadPoolBindIoCompletionCallback:
 | 
						|
//
 | 
						|
// The real public API. Clients that wish to queue io completions
 | 
						|
// to the process Thread Pool should use this call as they would 
 | 
						|
// the NT5 thread pool call.
 | 
						|
//
 | 
						|
 | 
						|
BOOL
 | 
						|
ThreadPoolBindIoCompletionCallback(
 | 
						|
    IN HANDLE FileHandle,                         // handle to file
 | 
						|
    IN LPOVERLAPPED_COMPLETION_ROUTINE Function,  // callback
 | 
						|
    IN ULONG Flags                                // reserved
 | 
						|
    );
 | 
						|
 | 
						|
//
 | 
						|
// ThreadPoolPostCompletion:
 | 
						|
//
 | 
						|
// Use this function to get one of the process worker threads
 | 
						|
// to call your completion function.
 | 
						|
//
 | 
						|
 | 
						|
BOOL ThreadPoolPostCompletion(
 | 
						|
    IN DWORD dwBytesTransferred,
 | 
						|
    IN LPOVERLAPPED_COMPLETION_ROUTINE Function,
 | 
						|
    IN LPOVERLAPPED lpo
 | 
						|
    );
 | 
						|
 | 
						|
 | 
						|
// forward declarations
 | 
						|
enum THREAD_POOL_INFO;
 | 
						|
class THREAD_POOL_DATA;
 | 
						|
 | 
						|
// 
 | 
						|
// To use a thread pool other than the per process thread pool
 | 
						|
// Use the class THREAD_POOL instead of the global functions
 | 
						|
//
 | 
						|
class dllexp THREAD_POOL
 | 
						|
{
 | 
						|
public:
 | 
						|
    static BOOL CreateThreadPool(OUT THREAD_POOL ** ppThreadPool);
 | 
						|
    VOID TerminateThreadPool();
 | 
						|
 | 
						|
    BOOL BindIoCompletionCallback(IN HANDLE hFileHandle,
 | 
						|
                                  IN LPOVERLAPPED_COMPLETION_ROUTINE function,
 | 
						|
                                  IN ULONG flags);
 | 
						|
 | 
						|
    BOOL PostCompletion(IN DWORD dwBytesTransferred,
 | 
						|
                        IN LPOVERLAPPED_COMPLETION_ROUTINE function,
 | 
						|
                        IN LPOVERLAPPED lpo);
 | 
						|
 | 
						|
    ULONG_PTR GetInfo(IN THREAD_POOL_INFO InfoId);
 | 
						|
    ULONG_PTR SetInfo(IN THREAD_POOL_INFO InfoId,
 | 
						|
                      IN ULONG_PTR        Data);
 | 
						|
 | 
						|
private:
 | 
						|
    // use create and terminate
 | 
						|
    THREAD_POOL();
 | 
						|
    ~THREAD_POOL();
 | 
						|
    
 | 
						|
    // not implemented
 | 
						|
    THREAD_POOL(const THREAD_POOL&);
 | 
						|
    THREAD_POOL& operator=(const THREAD_POOL&);
 | 
						|
 | 
						|
    // private data
 | 
						|
    THREAD_POOL_DATA * m_pData;
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
//
 | 
						|
// Configuration API calls. ONLY ULATQ should call these.
 | 
						|
//
 | 
						|
 | 
						|
HRESULT
 | 
						|
ThreadPoolInitialize( VOID );
 | 
						|
 | 
						|
HRESULT
 | 
						|
ThreadPoolTerminate( VOID );
 | 
						|
 | 
						|
ULONG_PTR
 | 
						|
ThreadPoolSetInfo(
 | 
						|
    IN THREAD_POOL_INFO InfoId,
 | 
						|
    IN ULONG_PTR        Data
 | 
						|
    );
 | 
						|
 | 
						|
ULONG_PTR
 | 
						|
ThreadPoolGetInfo(
 | 
						|
    IN THREAD_POOL_INFO InfoId
 | 
						|
    );
 | 
						|
 | 
						|
//
 | 
						|
// IDs for getting and setting configuration options
 | 
						|
//
 | 
						|
enum THREAD_POOL_INFO
 | 
						|
{
 | 
						|
    ThreadPoolMaxPoolThreads,    // per processor threads
 | 
						|
    ThreadPoolMaxConcurrency,    // per processor concurrency value
 | 
						|
    ThreadPoolThreadTimeout,     // timeout value for idle threads
 | 
						|
    ThreadPoolIncMaxPoolThreads, // Up the max thread count - set only
 | 
						|
    ThreadPoolDecMaxPoolThreads, // Decrease the max thread count - set only
 | 
						|
    ThreadPoolMaxThreadLimit,    // absolute maximum number of threads
 | 
						|
    ThreadPoolAvailableThreads   // Number of available threads - get only
 | 
						|
};
 | 
						|
 | 
						|
#endif // !_THREAD_POOL_H_
 | 
						|
 |