You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
2.0 KiB
65 lines
2.0 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $Workfile: $ |
|
// $Date: $ |
|
// |
|
//----------------------------------------------------------------------------- |
|
// $Log: $ |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
|
|
#ifndef THREADS_H |
|
#define THREADS_H |
|
#pragma once |
|
|
|
|
|
// Arrays that are indexed by thread should always be MAX_TOOL_THREADS+1 |
|
// large so THREADINDEX_MAIN can be used from the main thread. |
|
#define MAX_TOOL_THREADS 16 |
|
#define THREADINDEX_MAIN (MAX_TOOL_THREADS) |
|
|
|
|
|
extern int numthreads; |
|
|
|
// If set to true, then all the threads that are created are low priority. |
|
extern bool g_bLowPriorityThreads; |
|
|
|
typedef void (*ThreadWorkerFn)( int iThread, int iWorkItem ); |
|
typedef void (*RunThreadsFn)( int iThread, void *pUserData ); |
|
|
|
|
|
enum ERunThreadsPriority |
|
{ |
|
k_eRunThreadsPriority_UseGlobalState=0, // Default.. uses g_bLowPriorityThreads to decide what to set the priority to. |
|
k_eRunThreadsPriority_Normal, // Doesn't touch thread priorities. |
|
k_eRunThreadsPriority_Idle // Sets threads to idle priority. |
|
}; |
|
|
|
|
|
// Put the process into an idle priority class so it doesn't hog the UI. |
|
void SetLowPriority(); |
|
|
|
void ThreadSetDefault (void); |
|
int GetThreadWork (void); |
|
|
|
void RunThreadsOnIndividual ( int workcnt, qboolean showpacifier, ThreadWorkerFn fn ); |
|
|
|
void RunThreadsOn ( int workcnt, qboolean showpacifier, RunThreadsFn fn, void *pUserData=NULL ); |
|
|
|
// This version doesn't track work items - it just runs your function and waits for it to finish. |
|
void RunThreads_Start( RunThreadsFn fn, void *pUserData, ERunThreadsPriority ePriority=k_eRunThreadsPriority_UseGlobalState ); |
|
void RunThreads_End(); |
|
|
|
void ThreadLock (void); |
|
void ThreadUnlock (void); |
|
|
|
|
|
#ifndef NO_THREAD_NAMES |
|
#define RunThreadsOn(n,p,f) { if (p) printf("%-20s ", #f ":"); RunThreadsOn(n,p,f); } |
|
#define RunThreadsOnIndividual(n,p,f) { if (p) printf("%-20s ", #f ":"); RunThreadsOnIndividual(n,p,f); } |
|
#endif |
|
|
|
#endif // THREADS_H
|
|
|