concurrency 命名空间
concurrency 命名空间提供可用于访问并发运行时的选件类和函数,C++的并发编程框架。 有关更多信息,请参见并发运行时。
namespace concurrency;
成员
Typedef
名称 |
说明 |
---|---|
runtime_object_identity |
每个消息实例后面都有一个标识,因为它已被克隆并在消息元素之间传递。 这不能为消息对象的地址。 |
task_status |
表示任务的最终状态的类型。 有效值为 completed 和 canceled。 |
TaskProc |
任务的基本抽象定义为 void (__cdecl * TaskProc)(void *)。 调用 TaskProc 来调用任务正文。 |
类
名称 |
说明 |
---|---|
affinity_partitioner 选件类类似于 static_partitioner 选件类,但是,它按映射subranges其选择提高缓存关联到辅助线程。 它可以显着提高性能,当循环重新实现在同一组数据时和数据放入缓存。 请注意必须使用同一 affinity_partitioner 对象与执行在特定的数据设置并行循环的后续迭代,受益于数据位置。 |
|
旨在用作所有独立代理的基类的类。 使用消息传递,它用于隐藏状态其他代理并与之交互。 |
|
auto_partitioner 选件类表示默认方法 parallel_for、parallel_for_each 和 parallel_transform 使用进行分区它们重复的大小。 分区窃取为负载平衡的employes范围此方法以及每次重复取消。 |
|
此选件类介绍异常,则将引发消息块为指针的操作无效执行的目标时。 |
|
call 消息块是多源有序的 target_block,可以在接收消息时调用指定的函数。 |
|
cancellation_token 选件类表示能够确定某项操作是否请求取消。 |
|
cancellation_token_registration 选件类表示从 cancellation_token的回调来通知。 |
|
cancellation_token_source 选件类表示能够取消操作。 |
|
choice 消息块是多源且单个目标的块,表示与一组源进行的控制流交互。 选择块将等待多个源的任何一个来生成消息,并将传播生成该消息的源的索引。 |
|
combinable<T> 对象旨在提供数据的线程私有副本,以在并行算法期间执行无锁线程本地子计算。 在并行操作结束时,线程私有 sub-computation 则可以合并到最终结果。 该类可替代共享变量使用,如果在该共享变量上可能存在大量争用,则可能会使性能提高。 |
|
concurrent_priority_queue 选件类是允许多个线程同时推送和弹出项的容器。 项目按用作模板参数中提供的functor取决于优先级的优先级顺序弹出。 |
|
concurrent_queue 类是允许对其元素进行先进先出访问的序列容器类。 它允许组有限并发安全操作,例如 push 和 try_pop。 |
|
concurrent_unordered_map 选件类是控件类型 std::pair<const _Key_type, _Element_type>的元素更改某个长序列的并发安全的容器。 序列表示为实现并发安全追加,元素访问、迭代器访问和迭代器遍历操作的方法。 |
|
concurrent_unordered_multimap 选件类是控件类型 std::pair<const _Key_type, _Element_type>的元素更改某个长序列的并发安全的容器。 序列表示为实现并发安全追加,元素访问、迭代器访问和迭代器遍历操作的方法。 |
|
concurrent_unordered_multiset 选件类是控件类型_Key_type的元素更改某个长序列的并发安全的容器。 序列表示为实现并发安全追加,元素访问、迭代器访问和迭代器遍历操作的方法。 |
|
concurrent_unordered_set 选件类是控件类型_Key_type的元素更改某个长序列的并发安全的容器。 序列表示为实现并发安全追加,元素访问、迭代器访问和迭代器遍历操作的方法。 |
|
concurrent_vector 类是允许对任意元素进行随机访问的序列容器类。 它实现并发安全追加,元素访问、迭代器访问和迭代器遍历操作。 |
|
表示执行上下文的抽象。 |
|
当 Context 对象的 Unblock 方法从同一上下文时,调用此选件类介绍异常时引发。 这将指示给定上下文自身解锁的尝试。 |
|
此选件类介绍异常,则将引发调用 Block,而 Context 对象的 Unblock 方法未正确匹配。 |
|
一个明确知道并发运行时的非重入互斥体。 |
|
表示与调用上下文相关联的当前计划程序的抽象。 |
|
此选件类描述了,则会引发异常。Scheduler::SetDefaultSchedulerPolicy 调用方法时,默认计划程序在进程中已存在。 |
|
一个明确知道并发运行时的手动重置事件。 |
|
当锁不正确时,获取此选件类介绍异常时引发。 |
|
此选件类描述了,则会引发异常。Attach 调用方法已经附加到当前上下文的 Scheduler 对象时。 |
|
此选件类描述了,则会引发异常。CurrentScheduler::Detach 调用方法使用 Scheduler 对象的 Attach 方法,未附加到任何计划程序的上下文中。 |
|
此选件类描述了,则会引发异常。Reference 调用方法关闭时的一 Scheduler 对象,从不属于该计划程序的一部分的上下文。 |
|
此选件类介绍异常,则将引发消息的 link_target 方法阻止调用,而消息块无法与目标链接。 这可能超出消息块是允许或尝试用一个源两次链接特定目标链接数的结果。 |
|
此选件类描述了,则会引发异常。task_handle 对象计划多次使用 task_group 的 run 方法时或没有介入的 structured_task_group 对象调用 wait 或 run_and_wait 方法。 |
|
此选件类介绍异常,则将引发更准确地不是由并发运行时引发的另一个异常类型描述的无效操作时。 |
|
当 Context::Oversubscribe 方法调用与 _BeginOversubscription 参数设置为 false,而无需事先调用 Context::Oversubscribe 与 _BeginOversubscription 参数的方法设置为 true时,此选件类介绍异常时引发。 |
|
此选件类介绍异常,则将引发了无效或未知键传递给 SchedulerPolicy 对象构造函数时,也 SchedulerPolicy 对象的 SetPolicyValue 方法通过必须更改使用其他方式例如 SetConcurrencyLimits 方法,的键。 |
|
此选件类描述引发异常。,当尝试设置 SchedulerPolicy 对象的并发限制此类时 MinConcurrency 键的值大于 MaxConcurrency 键的值小于。 |
|
当 SchedulerPolicy 对象的策略键设置为该键时,一个无效值此选件类介绍异常时引发。 |
|
ISource 类是所有源块的接口。 源块将消息传播到 ITarget 块。 |
|
ITarget 类是所有目标块的接口。 目标块使用 ISource 块提供给他们的消息。 |
|
join 消息块是一个单目标、多源、有序的 propagator_block,可以合并来自其每个源的类型为 _Type 的消息。 |
|
物理位置的抽象硬件的。 |
|
包含正在消息块之间传递数据负载的基本消息信封。 |
|
当消息块找不到请求的消息时,此选件类介绍异常时引发。 |
|
message_processor 类是用于处理 message 对象的抽象基类。 信息的顺序无法确保固定。 |
|
此选件类介绍异常,则将引发对任务进行时仍调度到对象的析构函数执行的 task_group 或 structured_task_group 对象。 如果析构函数到达由于展开,因为异常的堆栈此异常不会引发异常。 |
|
multi_link_registry 对象是 network_link_registry,管理多个源块或多个目标块。 |
|
multitype_join 消息块是一个多源、单目标的消息块,可以合并来自其每个源的不同类型的消息并将组合消息的元组提供给其目标。 |
|
此选件类介绍异常,则将引发并发运行时检测时忽略对使用 Scheduler 对象的 Attach 方法,附加到第二个计划程序的上下文 CurrentScheduler::Detach 方法。 |
|
network_link_registry 的抽象基类管理源和目标块之间的链接。 |
|
当操作超时时,此选件类介绍异常时引发。 |
|
ordered_message_processor 是允许消息块按接受的顺序处理消息的 message_processor。 |
|
overwrite_buffer 消息块是一个多目标、多源、有序的 propagator_block,一次能够存储一条消息。 新消息覆盖之前保存的消息。 |
|
进度申报人选件类允许报告特定类型的进度通知。 每progress_reporter对象绑定到特定异步操作。 |
|
propagator_block 类是同时为源和目标的消息块的一个抽象基类。 组合了 source_block 和 target_block 类的功能。 |
|
只能本地旋转的基于编写器首选队列的读取器-编写器锁。 锁授予对编写器的先进先出 (FIFO) 访问,并使读取器在编写器在持续负载的情况下停止。 |
|
表示计划组的抽象。 计划组组织受益于在时间上(通过在移到另一个组之前执行同一组中另一个任务)或空间上(通过在同一 NUMA 节点或物理套接字上执行同一个组内的多项)紧密安排在一起的一组相关工作。 |
|
表示并发运行时计划程序的抽象。 |
|
此选件类介绍异常,则将引发需要一个计划程序附加到当前上下文的操作时,将会显示一个不是。 |
|
此选件类描述引发异常。由于无法获取在并发运行时的关键资源。 |
|
此选件类介绍并发运行时引发异常。由于未能创建辅助执行上下文。 |
|
SchedulerPolicy 类包含一组键/值对,一个用于每个策略元素,其控制计划程序实例的行为。 |
|
simple_partitioner 选件类表示 parallel_for重复的静态分区该范围。 分区程序将此范围转换为区块这样每个区块具有块范围指定迭代的至少数。 |
|
single_assignment 消息块是一个多目标、多源、有序的 propagator_block,能够存储单个、只写一次的 message。 |
|
single_link_registry 对象是一个 network_link_registry,其只管理单个源或目标块。 |
|
source_block 是仅限于源的块的抽象基类。 该类提供了基本的链接管理功能,还提供了常见的错误检查。 |
|
source_link_manager 对象管理 ISource 块的消息阻止网络链接。 |
|
static_partitioner 选件类表示 parallel_for重复的静态分区该范围。 尽管具有辅助可用于该underyling的计划程序,分区程序将此范围转换为许多区块。 |
|
structured_task_group 类表示并行工作的高度结构化集合。 可以使用 task_handle 对象将各个任务排队至 structured_task_group 中,并等待它们完成,或在它们完成执行之前取消任务组,这将中止尚未开始执行的所有任务。 |
|
target_block 类是一个抽象基类,提供基本链接管理功能和仅限于目标的块的错误检查。 |
|
并行模式库(PPL) task 选件类。 task 对象在并发运行时的并行算法和并行工作的同时表示可异步执行的工作,并生成的其他任务。 使类型 _ResultType 的结果在成功完成的。 类型 task<void> 任务不产生结果。 任务可以将等待和独立于其他任务取消。 使用延续(then),也会构成与其他任务,并连接when_all()并选择(when_any)模式。 |
|
PPL任务介绍异常引发此选件类分层为了强制当前任务取消。 它用 任务的 get() 方法还引发,已取消的任务的。 |
|
task_completion_event 选件类来延迟任务的执行,直到满足条件,或者启动任务以响应某个外部事件。 |
|
task_continuation_context 选件类允许您指定在何处需要继续执行。 使用从Metro样式app的选件此类只有非常有用。 对于非Metro样式apps,运行时依赖任务延续的执行上下文,且不能配置。 |
|
task_group 类表示可以等待或取消的并行工作集合。 |
|
task_handle 类表示单个并行工作项目。 它封装了说明和执行一段工作所需的数据。 |
|
timer 消息块是一个单目标 source_block,能够在经过指定的时间段后或在特定时间间隔向其目标发送消息。 |
|
transformer 消息块是一个单目标、多源、有序的 propagator_block,可以接受同一类型的消息,并能够存储大量不同类型的消息。 |
|
unbounded_buffer 消息块是一个多目标、多源、有序的 propagator_block,能够存储大量消息。 |
|
当使用时,此选件类描述引发异常。不支持的操作系统。 并发运行时不支持 Windows XP Service Pack 3 之前的操作系统。 |
结构
名称 |
说明 |
---|---|
DispatchState 结构用于将状态传递给 IExecutionContext::Dispatch 方法。 它描述了一些情形,即调用 IExecutionContext 接口上的 Dispatch 方法的情形。 |
|
可以在指定虚拟处理器上运行并可以协作切换上下文的执行上下文的接口。 |
|
硬件线程的抽象。 |
|
并发运行时资源管理器的接口。 这是计划程序与资源管理器通信的接口。 |
|
工作计划程序抽象的接口。 并发运行时的资源管理器使用该接口与工作计划程序进行通信。 |
|
计划程序用来与并发运行时的资源管理器进行通信以协商资源分配的接口。 |
|
执行线程的抽象。 根据您创建的计划程序的 SchedulerType 策略密钥,资源管理器将授予您由普通的 Win32 线程或用户模式计划 (UMS) 线程支持的线程代理。 UMS 线程在版本为 Windows 7 或更高版本的 64 位操作系统上支持。 |
|
为可执行资源的接口所定义的资源管理器。 |
|
对拓扑节点的接口所定义的资源管理器。 节点包含一个或多个执行资源。 |
|
表示 UMS 完成列表。 如果为 UMS 线程块,将分离计划程序指定的计划上下文,以决定初始线程阻塞时,在底层虚拟处理器根上计划什么。 如果初始线程未阻止,则操作系统会让之在完成列表中排队,该列表可以通过该接口访问。 计划程序可以在指定的计划上下文上或搜索工作的任意地方查询完成列表。 |
|
希望并发运行时资源管理器向其传递用户模式计划 (UMS) 线程的工作计划程序抽象的接口。 资源管理器使用该接口与 UMS 线程计划程序通信。 IUMSScheduler 接口从 IScheduler 接口继承。 |
|
执行线程的抽象。 如果要为计划程序授予用户模式可计划 (UMS) 线程,则将计划程序策略元素 SchedulerKind 的值设置为 UmsThreadDefault,并实现 IUMSScheduler 接口。 UMS 线程仅在版本为 Windows 7 或更高版本的 64 位操作系统上支持。 |
|
表示来自资源管理器的通知,说明阻塞并触发返回到计划程序的指定计划上下文的线程代理已解除阻塞,并已准备好进行计划。 一旦返回自 GetContext 方法的线程代理相关的执行上下文被重新计划,则该接口无效。 |
|
线程代理可在其中执行的硬件线程的抽象。 |
枚举
名称 |
说明 |
---|---|
agent 的有效状态。 |
|
可以跟踪使用该跟踪功能事件的类型由代理库提供 |
|
可以使用由并发运行时提供的跟踪功能要跟踪的事件类型。 |
|
事件类型的跟踪标志 |
|
上下文处于其中的关键区域类型。 |
|
由 DynamicProgressFeedback 策略用于描述计划程序的资源是否根据从计划程序收集的统计信息或只根据进出闲置状态的虚拟处理器来重新平衡,方法是通过在 IVirtualProcessorRoot 接口上调用 Activate 和 Deactivate 方法。 有关可用计划程序策略的更多信息,请参见 PolicyElementKey 枚举。 |
|
join 消息块的类型。 |
|
message 对象到块的提供的有效响应。 |
|
描述计划程序行为各方面的策略键。 每个策略元素由键值对描述。 有关计划程序策略及其对计划程序的影响的详细信息,请参见任务计划程序(并发运行时)。 |
|
由 SchedulerKind 策略使用以描述应由计划程序用于基础执行上下文的线程类型。 有关可用计划程序策略的更多信息,请参见 PolicyElementKey 枚举。 |
|
由 SchedulingProtocol 策略用于描述将那个计划算法计划程序。 有关可用计划程序策略的更多信息,请参见 PolicyElementKey 枚举。 |
|
用于表示线程代理执行到不同线程代理的协作性上下文切换时,线程代理所处状态。 |
|
描述 task_group 或 structured_task_group 对象的执行状态。 通过等待计划在任务组完成的任务的多种方法返回此类型的值。 |
|
用于使 WinRTInitialization 策略描述是否,并且Windows运行时如何在具有版本的Windows 8操作系统上运行或更高版本的应用程序的调度程序线程进行初始化。 有关可用计划程序策略的更多信息,请参见 PolicyElementKey 枚举。 |
函数
名称 |
说明 |
---|---|
从并发运行时缓存Suballocator将范围的内存块指定。 |
|
已重载。 异步发送操作计划任务从而将数据传播到目标块。 |
|
取消当前正在执行的任务。 此函数可调用从任务体的内部中止任务的执行并使其输入 canceled 状态。 当它可以使用响应 is_task_cancellation_requested 函数时,您可以单独还使用它,启动当前正在执行的任务的取消。 如果不在 task体内,则不会调用此功能的一个支持的方案。 这样做将导致未定义的行为(例如出现崩溃或挂起在您的应用程序。 |
|
创建基于用户提供的lambda或函数对象的Windows运行时异步构造。 create_async 的返回类型是基于该lambda签名的一个 IAsyncAction^、IAsyncActionWithProgress<TProgress>^、IAsyncOperation<TResult>^或 IAsyncOperationWithProgress<TResult, TProgress>^ 传递给方法。 |
|
已重载。 创建一个PPL 任务 对象。 可以使用create_task 任何地方将使用任务构造函数。 提供主要为了方便起见,因为它允许访问 auto 关键字的用法,在创建任务时。 |
|
返回表示并发运行时资源管理器的单一实例的接口。 资源管理器负责将资源分配给要彼此相互合作的计划程序。 |
|
禁止在并发运行时中跟踪。 默认情况下,因为ETW跟踪中注销此功能已弃用。 |
|
启用在并发运行时中跟踪。 因为ETW跟踪现在为默认情况下,此功能已弃用。 |
|
释放 Alloc 方法此前分配的内存块到并发运行时缓存Suballocator。 |
|
返回可以分配给实现 IExecutionContext 接口的执行上下文的唯一标识符。 |
|
返回操作系统版本。 |
|
返回基础系统上的硬件线程数。 |
|
返回基础系统上的 NUMA 节点数或处理器包数。 |
|
返回可以分配给实现 IScheduler 接口的计划程序的唯一标识符。 |
|
创建一个会破坏用于取消点。 如果取消正在进行此函数调用的上下文,则将引发中止当前执行并行工作的执行的内部异常。 如果取消正在进行,函数不执行任何操作。 |
|
返回在当前上下文上正在执行内联的任务组是否正在活动的取消的过程中(或不久将取消)的指示。 请注意,如果当前上下文上没有任何任务组当前正在执行内联,将返回 false。 |
|
返回表示当前执行的任务是否接收请求取消其执行。 在任务取消请求,如果任务使用取消标记创建的,因此,该标记源与该标记中移除。 |
|
已重载。 从可选的 Scheduler 或 ScheduleGroup 及两个和十个输入源之间构造 choice 消息块。 |
|
已重载。 从可选的 Scheduler 或 ScheduleGroup 及两个和十个输入源之间构造 greedy multitype_join 消息块。 |
|
已重载。 从可选的 Scheduler 或 ScheduleGroup 及两个和十个输入源之间构造 non_greedy multitype_join 消息块。 |
|
用于创建 task_handle 对象的工厂方法。 |
|
已重载。 在一个指定大小的元素到一个nondescending的顺序,或基于二进制谓词指定的一个排序的条件,并行。 此函数语义相似 std::sort 因为它是基于比较,而不稳定,就地排序,但它需要 O(n) 额外的空间,并为元素需要默认初始化排序。 |
|
已重载。 parallel_for 循环访问一个索引范围,并在每次迭代时以并行方式执行用户提供的函数。 |
|
已重载。 parallel_for_each 以并行方式将指定函数应用于范围内的每个元素。 除了并行对元素执行迭代及迭代的顺序未指定,语义上等效于 for_each 命名空间中的 std 函数。 实参 _Func 必须支持窗体 operator()(T) 的函数调用运算符,其中形参 T 是正在进行迭代的容器的项类型。 |
|
已重载。 执行作为并行和块中的参数而提供的函数对象,直至其完成执行。 每个函数对象可以是 lambda 表达式、函数指针或支持带有签名 void operator()() 的函数调用运算符的任何对象。 |
|
已重载。 在一个指定大小的元素的"使用降序排序算法基数。 这是一个稳定排序需要一个射影函数可能项目元素分类为无符号如整数键的函数。 默认初始化对于元素是必需的排序。 |
|
已重载。 通过计算顺序部分和计算所有元素的总和在指定范围的或计算从使用指定的二元运算类似获得的顺序部分的结果除和之外,并行。 parallel_reduce 语义相似 std::accumulate,除此之外,前提是二元运算是关联的,并需要标识值而不是初始值。 |
|
已重载。 在一个指定大小的元素到一个nondescending的顺序,或基于二进制谓词指定的一个排序的条件,并行。 此函数语义相似 std::sort 因为它是基于比较,而不稳定,就地排序。 |
|
已重载。 两个源范围应用指定的函数对象到位于源范围中的每个元素,或对元素对,并复制函数对象的返回值赋给目标范围,并行。 此功能与 std::transform语义上相等。 |
|
已重载。 一般接收实现,允许上下文仅等待来自一个源的数据并筛选所接受的值。 |
|
立即和同步执行函数对象在特定取消标记中。 |
|
已重载。 同步发送操作会一直等待,直到目标接受或拒绝消息。 |
|
已重载。 限制并发运行时内部辅助线程使用的执行资源与关联设置指定。 它是有效的调用此方法,只有在资源管理器创建之前,或者在两种资源管理器生存期之间。 只要资源管理器无法在调用时,存在它可以多次调用。 在关联限制设置后,它仍然有效,直至下一个有效的调用 set_task_execution_resources 方法。 关联掩码提供了不需要是处理关联掩码的子集。 如果需要,将更新过程关联。 |
|
交换两个 concurrent_vector 对象的元素。 |
|
关联给定到消息块或在ETW跟踪的代理。 |
|
已重载。 一般尝试接收实现,允许上下文仅查找<来自一个源的数据并筛选所接受的值。 如果数据未就绪,则该方法将返回 false。 |
|
暂停当前上下文指定时间量。 |
|
已重载。 创建将成功完成的任务,并以参数中提供的所有任务成功完成。 |
|
已重载。 创建将成功完成的任务,并以参数中提供的任何任务成功完成。 |
运算符
名称 |
说明 |
---|---|
测试运算符左侧的 concurrent_vector 对象是否不等于右侧的 concurrent_vector 对象。 |
|
已重载。 创建将成功完成的任务,并以参数中提供的任务成功完成。 |
|
已重载。 创建将成功完成的任务,并以参数中提供的任务之一成功完成。 |
|
测试运算符左侧的 concurrent_vector 对象是否小于右侧的 concurrent_vector 对象。 |
|
测试运算符左侧的 concurrent_vector 对象是否小于或等于右侧的 concurrent_vector 对象。 |
|
测试运算符左侧的 concurrent_vector 对象是否等于右侧的 concurrent_vector 对象。 |
|
测试运算符左侧的 concurrent_vector 对象是否大于右侧的 concurrent_vector 对象。 |
|
测试运算符左侧的 concurrent_vector 对象是否大于或等于右侧的 concurrent_vector 对象。 |
常量
名称 |
说明 |
---|---|
({B9B5B78C - 0713 - 4898 - 21。C. 67949DCED07})描述ETW事件的类别GUID激发的代理库在并发运行时。 |
|
一个类别 GUID,描述由与日常任务或任务直接相关的并发运行时激发的 ETW 事件。 |
|
并发运行时的 ETW 提供程序 GUID。 |
|
表示支持 Visual Studio 2010 中定义的资源管理器接口。 |
|
一个类别 GUID,描述由未通过其他类别更具体介绍的并发运行时激发的 ETW 事件。 |
|
一个类别 GUID,描述由与上下文直接相关的并发运行时激发的 ETW 事件。 |
|
表示等待永远不应超时的值。 |
|
表示等待超时的值。 |
|
策略键 ContextPriority 的特殊值,指示计划程序中所有上下文的线程优先级别都应与创建该计划程序的线程的优先级别相同。 |
|
一个类别 GUID,描述由与锁定直接相关的并发运行时激发的 ETW 事件。 |
|
策略键 MinConcurrency 和 MaxConcurrency 的特殊值。 默认值为没有其他约束的机器上的硬件线程数。 |
|
一个类别 GUID,描述由与 parallel_for_each 函数的用法直接相关的并发运行时激发的 ETW 事件。 |
|
一个类别 GUID,描述由与 parallel_for 函数的用法直接相关的并发运行时激发的 ETW 事件。 |
|
一个类别 GUID,描述由与 parallel_invoke 函数的用法直接相关的并发运行时激发的 ETW 事件。 |
|
一个类别 GUID,描述由与资源管理器直接相关的并发运行时激发的 ETW 事件。 |
|
一个类别 GUID,描述由与计划组直接相关的并发运行时激发的 ETW 事件。 |
|
一个类别 GUID,描述由与计划程序活动直接相关的并发运行时激发的 ETW 事件。 |
|
一个类别 GUID,描述由与虚拟处理器直接相关的并发运行时激发的 ETW 事件。 |
要求
标头: agents.h,concrt.h,concrtrm.h,concurrent_priority_queue.h,concurrent_queue.h,concurrent_unordered_map.h,concurrent_unordered_set.h,concurrent_vector.h,ppl.h,ppltasks.h