IResourceManager Structure
An interface to the Concurrency Runtime's Resource Manager. This is the interface by which schedulers communicate with the Resource Manager.
Syntax
struct IResourceManager;
Members
Public Enumerations
Name | Description |
---|---|
IResourceManager::OSVersion | An enumerated type that represents the operating system version. |
Public Methods
Name | Description |
---|---|
IResourceManager::CreateNodeTopology | Present only in debug builds of the runtime, this method is a test hook designed to facilitate testing of the Resource Manager on varying hardware topologies, without requiring actual hardware matching the configuration. With retail builds of the runtime, this method will return without performing any action. |
IResourceManager::GetAvailableNodeCount | Returns the number of nodes available to the Resource Manager. |
IResourceManager::GetFirstNode | Returns the first node in enumeration order as defined by the Resource Manager. |
IResourceManager::Reference | Increments the reference count on the Resource Manager instance. |
IResourceManager::RegisterScheduler | Registers a scheduler with the Resource Manager. Once the scheduler is registered, it should communicate with the Resource Manager using the ISchedulerProxy interface that is returned. |
IResourceManager::Release | Decrements the reference count on the Resource Manager instance. The Resource Manager is destroyed when its reference count goes to 0 . |
Remarks
Use the CreateResourceManager function to obtain an interface to the singleton Resource Manager instance. The method increments a reference count on the Resource Manager, and you should invoke the IResourceManager::Release method to release the reference when you are done with Resource Manager. Typically, each scheduler you create will invoke this method during creation, and release the reference to the Resource Manager after it shuts down.
Inheritance Hierarchy
IResourceManager
Requirements
Header: concrtrm.h
Namespace: concurrency
IResourceManager::CreateNodeTopology Method
Present only in debug builds of the runtime, this method is a test hook designed to facilitate testing of the Resource Manager on varying hardware topologies, without requiring actual hardware matching the configuration. With retail builds of the runtime, this method will return without performing any action.
virtual void CreateNodeTopology(
unsigned int nodeCount,
_In_reads_(nodeCount) unsigned int* pCoreCount,
_In_reads_opt_(nodeCount) unsigned int** pNodeDistance,
_In_reads_(nodeCount) unsigned int* pProcessorGroups) = 0;
Parameters
nodeCount
The number of processor nodes being simulated.
pCoreCount
An array that specifies the number of cores on each node.
pNodeDistance
A matrix specifying the node distance between any two nodes. This parameter can have the value NULL
.
pProcessorGroups
An array that specifies the processor group each node belongs to.
Remarks
invalid_argument is thrown if the parameter nodeCount
has the value 0
was passed in, or if the parameter pCoreCount
has the value NULL
.
invalid_operation is thrown if this method is called while other schedulers exist in the process.
IResourceManager::GetAvailableNodeCount Method
Returns the number of nodes available to the Resource Manager.
virtual unsigned int GetAvailableNodeCount() const = 0;
Return Value
The number of nodes available to the Resource Manager.
IResourceManager::GetFirstNode Method
Returns the first node in enumeration order as defined by the Resource Manager.
virtual ITopologyNode* GetFirstNode() const = 0;
Return Value
The first node in enumeration order as defined by the Resource Manager.
IResourceManager::OSVersion Enumeration
An enumerated type that represents the operating system version.
enum OSVersion;
IResourceManager::Reference Method
Increments the reference count on the Resource Manager instance.
virtual unsigned int Reference() = 0;
Return Value
The resulting reference count.
IResourceManager::RegisterScheduler Method
Registers a scheduler with the Resource Manager. Once the scheduler is registered, it should communicate with the Resource Manager using the ISchedulerProxy
interface that is returned.
virtual ISchedulerProxy *RegisterScheduler(
_Inout_ IScheduler* pScheduler,
unsigned int version) = 0;
Parameters
pScheduler
An IScheduler
interface to the scheduler to be registered.
version
The version of communication interface the scheduler is using to communicate with the Resource Manager. Using a version allows the Resource Manager to evolve the communication interface while allowing schedulers to obtain access to older features. Schedulers that wish to use Resource Manager features present in Visual Studio 2010 should use the version CONCRT_RM_VERSION_1
.
Return Value
The ISchedulerProxy
interface the Resource Manager has associated with your scheduler. Your scheduler should use this interface to communicate with Resource Manager from this point on.
Remarks
Use this method to initiate communication with the Resource Manager. The method associates the IScheduler
interface for your scheduler with an ISchedulerProxy
interface and hands it back to you. You can use the returned interface to request execution resources for use by your scheduler, or to subscribe threads with the Resource Manager. The Resource Manager will use policy elements from the scheduler policy returned by the IScheduler::GetPolicy method to determine what type of threads the scheduler will need to execute work. If your SchedulerKind
policy key has the value UmsThreadDefault
and the value is read back out of the policy as the value UmsThreadDefault
, the IScheduler
interface passed to the method must be an IUMSScheduler
interface.
The method throws an invalid_argument
exception if the parameter pScheduler
has the value NULL
or if the parameter version
is not a valid version for the communication interface.
IResourceManager::Release Method
Decrements the reference count on the Resource Manager instance. The Resource Manager is destroyed when its reference count goes to 0
.
virtual unsigned int Release() = 0;
Return Value
The resulting reference count.
See also
concurrency Namespace
ISchedulerProxy Structure
IScheduler Structure