
windows C++并行编程技术
文章平均质量分 76
windows Visual C++ 提供了以下技术,可创建多线程和并行程序,利用多核优势,使用 GPU 进行常规用途编程。
程序员王马
windows驱动工程师,从事windows 底层开发10年,开发过Serial、1394、stream、Image、Network、USB、GNSS、MBBCx、BlueTooch、Wifi、NCM等几乎所有类别的驱动程序开发项目。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
windows C++-并发中的最佳做法(一)
本文档介绍适用于并发运行时多个区域的最佳做法。原创 2024-10-22 00:15:00 · 790 阅读 · 0 评论 -
windows C++ 有效利用异步代理库(一)
本文档介绍如何有效利用异步代理库。代理库为粗粒度数据流和管道任务提升了基于角色的编程模型和进程内消息传递。原创 2024-10-20 18:19:39 · 575 阅读 · 0 评论 -
windows C++-有效使用PPL(四)
我们建议不在任务中执行关键操作(如释放资源),除非可以保证这些任务不会被取消。我们还建议不使用可在类型的析构函数中引发的运行时功能。原创 2024-10-19 03:35:19 · 473 阅读 · 0 评论 -
windows C++-有效使用PPL(二)
我们建议不在任务中执行关键操作(如释放资源),除非可以保证这些任务不会被取消。我们还建议不使用可在类型的析构函数中引发的运行时功能。原创 2024-10-16 00:15:00 · 511 阅读 · 0 评论 -
windows C++-有效使用PPL(一)
我们建议不在任务中执行关键操作(如释放资源),除非可以保证这些任务不会被取消。我们还建议不使用可在类型的析构函数中引发的运行时功能。原创 2024-10-16 00:15:00 · 653 阅读 · 0 评论 -
windows C++-使用异步消息快(一)
消息块参与发送和接收消息的操作。发送消息的消息块称为源块。接收消息的消息块称为目标块。发送和接收消息的消息块称为传播器块。代理库使用抽象类 concurrency::ISource 表示源快,使用抽象类 concurrency::ITarget 表示目标块。充当源的消息块类型派生自 ISource;充当目标的消息块类型派生自 ITarget。原创 2024-10-14 00:15:00 · 1652 阅读 · 0 评论 -
windows C++-移除界面工作线程(一)
本文档演示了如何使用并发运行时将 Microsoft 基础类 (MFC) 应用程序中由用户界面 (UI) 线程执行的工作移动到工作线程。本文档还演示了如何提高冗长绘制操作的性能。通过将阻塞性操作(例如,绘制)卸载到工作线程来从 UI 线程中移除工作,可以提高应用程序的响应能力。本文使用可生成 Mandelbrot 分形的绘制例程来演示一个冗长的阻塞性操作。Mandelbrot 分形的生成也非常适合并行化,因为每个像素的计算都是独立于所有其他计算的。原创 2024-10-10 04:11:32 · 611 阅读 · 0 评论 -
windows C++-避免死锁(下)
下面通过“哲学家就餐问题”说明了如何使用 concurrency::join 类来避免在应用程序中发生死锁。在软件应用中,如果两个或多个进程分别留有资源,且相互等待另一进程释放其他资源,就会发生死锁。“哲学家就餐问题”是在多个并发进程之间共享一组资源时可能发生的一组问题的一个特定示例。原创 2024-10-10 04:10:53 · 596 阅读 · 0 评论 -
windows C++-避免死锁(上)
下面通过“哲学家就餐问题”说明了如何使用 concurrency::join 类来避免在应用程序中发生死锁。在软件应用中,如果两个或多个进程分别留有资源,且相互等待另一进程释放其他资源,就会发生死锁。“哲学家就餐问题”是在多个并发进程之间共享一组资源时可能发生的一组问题的一个特定示例。原创 2024-10-09 22:12:07 · 783 阅读 · 0 评论 -
windows C++-实现 Future(一)
为了实现未来(future),本文定义 async_future 类。async_future 类使用并发运行时的这些组件:concurrency::task_group 类和 concurrency::single_assignment 类。async_future 类使用 task_group 类异步计算值,使用 single_assignment 类存储计算结果。async_future 类的构造函数采用计算结果的工作函数,并采用 get 方法检索结果。原创 2024-10-09 02:15:00 · 620 阅读 · 0 评论 -
windows C++-创建图像处理的异步消息(二)
网络会基于图像特征确定要对图像执行的操作。 此示例使用数据流模型通过网络路由图像。 在数据流模型中,程序的独立组件之间通过发送消息进行通信。 某个组件收到消息时,它可以执行某个操作,然后将该操作的结果传递给另一个组件。 相比之下,在控制流模型中,应用程序使用控制结构(例如条件语句和循环等等)控制程序中操作的顺序。基于数据流的网络会创建任务的管道。 管道的每个阶段都并发执行整个任务的一部分。 这就好比是汽车制造装配线。 每辆汽车通过装配线时,一站组装车架,另一站则安装引擎,以此类推。 通过实现同时装配多辆原创 2024-10-08 21:53:06 · 621 阅读 · 0 评论 -
windows C++-创建图像处理的异步消息(一)
网络会基于图像特征确定要对图像执行的操作。 此示例使用数据流模型通过网络路由图像。 在数据流模型中,程序的独立组件之间通过发送消息进行通信。 某个组件收到消息时,它可以执行某个操作,然后将该操作的结果传递给另一个组件。 相比之下,在控制流模型中,应用程序使用控制结构(例如条件语句和循环等等)控制程序中操作的顺序。基于数据流的网络会创建任务的管道。 管道的每个阶段都并发执行整个任务的一部分。 这就好比是汽车制造装配线。 每辆汽车通过装配线时,一站组装车架,另一站则安装引擎,以此类推。 通过实现同时装配多辆原创 2024-10-08 00:19:43 · 629 阅读 · 0 评论 -
windows C++-创建数据流代理(一)
控制流指的是程序中操作的执行顺序。控制流是通过使用条件语句、循环等控制结构调节的。此外,数据流指的是一种编程模型,在这种模型中,只有当所有需要的数据都可用时,才会进行计算。数据流编程模型与消息传递这一概念相关,其中程序的独立组件通过发送消息相互通信。异步代理同时支持控制流和数据流编程模型。尽管控制流模型适用于许多情况,但数据流模型也适用于其他一些情况,例如,当代理接收数据并执行基于该数据的有效负载的操作时。下面演示演示如何创建基于数据流,而不是基于控制流的基于代理的应用程序。原创 2024-10-07 23:58:39 · 543 阅读 · 0 评论 -
windows C++-创建基于代理的应用程序(上)
本文介绍了如何创建基本的基于代理的应用程序。在这个案例中,你可以创建一个代理,从文本文件中异步读取数据。应用程序使用 Adler-32 校验和算法来计算该文件内容的校验和。原创 2024-10-06 23:04:05 · 903 阅读 · 0 评论 -
windows C++-创建基于代理的应用程序(下)
本文介绍了如何创建基本的基于代理的应用程序。在这个案例中,你可以创建一个代理,从文本文件中异步读取数据。应用程序使用 Adler-32 校验和算法来计算该文件内容的校验和。原创 2024-10-06 23:03:57 · 504 阅读 · 0 评论 -
windows C++-windows C++-使用任务和 XML HTTP 请求进行连接(二)
当您使用 IXMLHTTPRequest2 接口通过 HTTP 创建 Web 请求时,可以实现 IXMLHTTPRequest2Callback 接口来接收服务器响应并对其他事件做出响应。此示例定义了 HttpRequest 类来创建 Web 请求,并定义了 HttpRequestBuffersCallback 和 HttpRequestStringCallback 类来处理响应。原创 2024-10-03 21:12:30 · 624 阅读 · 0 评论 -
windows C++-使用任务和 XML HTTP 请求进行连接(一)
当您使用 IXMLHTTPRequest2 接口通过 HTTP 创建 Web 请求时,可以实现 IXMLHTTPRequest2Callback 接口来接收服务器响应并对其他事件做出响应。此示例定义了 HttpRequest 类来创建 Web 请求,并定义了 HttpRequestBuffersCallback 和 HttpRequestStringCallback 类来处理响应。原创 2024-10-02 02:07:13 · 1132 阅读 · 0 评论 -
windows C++-内存管理函数
该文档介绍并发运行时提供的内存管理函数,可帮助你以并发方式分配和释放内存。并发运行时提供了一个默认计划程序,因此无需在应用程序中创建一个。由于任务计划程序有助于优化应用程序的性能,如果你刚开始接触并发运行时,建议从使用并行模式库 (PPL) 或异步代理库开始。并发运行时提供两个内存管理函数,这些函数已经过优化,能以并发方式分配和释放内存块。concurrency::Alloc 函数通过使用指定的大小来分配内存块。concurrency::Free 函数释放由 Alloc 分配的内存。原创 2024-10-01 04:36:46 · 906 阅读 · 0 评论 -
windows C++-使用上下文类实现协作信号量
下面演示如何使用 concurrency::Context 类实现协作信号灯类。Context 类允许你阻止或暂停当前执行上下文。在当前上下文因资源不可用而无法继续时,阻止或暂停当前上下文很有用。信号灯是当前执行上下文必须等待资源变为可用的一种情况示例。信号灯(例如关键节对象)是一个同步对象,支持一个上下文中的代码具有对资源的独占访问权限。但是,与关键节对象不同,信号灯支持多个上下文同时访问资源。如果具有信号灯锁的上下文数量达到上限,则每个附加的上下文必须等待另一个上下文释放信号灯锁。原创 2024-09-30 00:15:00 · 968 阅读 · 0 评论 -
windows C++-使用过度订阅偏移延迟
超额订阅可以提高某些包含高延迟任务的应用程序的整体效率。本文说明如何使用超额订阅来抵消从网络连接读取数据所导致的延迟。原创 2024-09-30 00:15:00 · 559 阅读 · 0 评论 -
windows C++~上下文
本文档介绍并发运行时中上下文的角色。附加到计划程序的线程称为执行上下文(或只是上下文)。concurrency::wait 函数和 concurrency::Context 类允许你控制上下文的行为。使用 wait 函数在指定时间内暂停当前上下文。当你需要更好地控制上下文何时阻止、取消阻止和暂停时,或者更好地控制你希望何时过度订阅当前上下文时,请使用 Context 类。并发运行时提供了一个默认计划程序,因此无需在应用程序中创建一个。原创 2024-09-30 00:15:00 · 507 阅读 · 0 评论 -
windows C++-计划组
本文档介绍并发运行时中计划组的角色。计划组将相关任务关联在一起或进行分组。每个计划程序都有一个或多个计划组。当你需要在任务之间处于较高位置时(例如,当一组相关的任务受益于在相同的处理器节点上执行操作时),可使用计划组。相反,当应用程序具有特定质量要求时,例如,当希望限制分配给一组任务的处理资源量时,请使用计划程序实例。有关计划程序实例的详细信息,请参阅计划程序实例。并发运行时提供了一个默认计划程序,因此无需在应用程序中创建一个。原创 2024-09-28 17:25:11 · 935 阅读 · 0 评论 -
windows C++ - 任务计划程序(并发运行时)
如果希望微调并发运行时的现有代码的性能,则任务计划程序会很有用。无法从通用 Windows 平台 (UWP) 应用获取任务计划程序。在 Visual Studio 2015 及更高版本中,concurrency::task 类和 ppltasks.h 中的相关类型使用 Windows 线程池作为其计划程序。本主题不再适用于在 ppltasks.h 中定义的类型。并行算法(例如 parallel_for)继续使用并发运行时作为默认计划程序。原创 2024-09-26 00:15:00 · 1785 阅读 · 0 评论 -
windows C++ 并行编程-同步数据结构
并发运行时提供了几种数据结构,用于同步对来自多个线程的共享数据的访问。当你有不经常修改的共享数据时,这些数据结构很有用。一个同步对象,例如,一个关键部分,会导致其他线程等待,直到共享资源可用。因此,如果使用这样的对象来同步对经常使用的数据的访问,会失去应用程序的可扩展性。并行模式库 (PPL) 提供了 concurrency::combinable 类,使你能够在无需同步的情况下在几个线程或任务之间共享资源。原创 2024-09-26 00:15:00 · 568 阅读 · 0 评论 -
windows C++ 并行编程-定期发送消息
该示例演示如何使用 concurrency::timer 类定期发送消息。原创 2024-09-24 00:15:00 · 454 阅读 · 0 评论 -
windows C++ 并行编程-异步消息块(五)
代理库提供了多种消息块类型,使你能够以线程安全的方式在应用程序组件之间传播消息。 这些消息块类型通常与 concurrency::send、concurrency::asend、concurrency::receive 和 concurrency::try_receive 等各种消息传递例程配合使用。原创 2024-09-21 00:01:11 · 528 阅读 · 0 评论 -
windows C++ 并行编程-异步消息块(四)
代理库提供了多种消息块类型,使你能够以线程安全的方式在应用程序组件之间传播消息。 这些消息块类型通常与 concurrency::send、concurrency::asend、concurrency::receive 和 concurrency::try_receive 等各种消息传递例程配合使用。原创 2024-09-21 00:01:08 · 1076 阅读 · 0 评论 -
windows C++ 并行编程-异步消息块(三)
代理库提供了多种消息块类型,使你能够以线程安全的方式在应用程序组件之间传播消息。 这些消息块类型通常与 concurrency::send、concurrency::asend、concurrency::receive 和 concurrency::try_receive 等各种消息传递例程配合使用。原创 2024-09-20 23:46:10 · 474 阅读 · 0 评论 -
windows C++ 并行编程-异步消息块(二)
代理库提供了多种消息块类型,使你能够以线程安全的方式在应用程序组件之间传播消息。 这些消息块类型通常与 concurrency::send、concurrency::asend、concurrency::receive 和 concurrency::try_receive 等各种消息传递例程配合使用。原创 2024-09-20 23:45:59 · 432 阅读 · 0 评论 -
windows C++ 并行编程-异步消息块(一)
代理库提供了多种消息块类型,使你能够以线程安全的方式在应用程序组件之间传播消息。 这些消息块类型通常与 concurrency::send、concurrency::asend、concurrency::receive 和 concurrency::try_receive 等各种消息传递例程配合使用。原创 2024-09-19 00:15:00 · 880 阅读 · 0 评论 -
windows C++ 并行编程-异步代理库概述
异步代理库(简称代理库)提供了一个编程模型,该模型可提高支持并发的应用程序开发的可靠性。代理库是一个 C++ 模板库,为粗粒度数据流和管道任务提升了基于角色的编程模型和进程内消息传递。代理库构建在并发运行时的计划和资源管理组件上。原创 2024-09-19 00:15:00 · 719 阅读 · 0 评论 -
windows C++ 并行编程-使用取消中断
示例1说明如何使用取消操作来实现基本的并行搜索算法;示例2演示如何编写基本树结构的搜索算法;示例3则是在树中搜索值。原创 2024-09-18 00:15:00 · 544 阅读 · 0 评论 -
windows C++ 并行编程-PPL 中的取消操作(四)
并行模式库 (PPL) 中取消操作的角色、如何取消并行工作以及如何确定取消并行工作的时间。运行时使用异常处理实现取消操作。请勿在代码中捕捉或处理这些异常。此外,还建议你在任务的函数体中编写异常安全的代码。例如,可以使用获取资源即初始化 (RAII) 模式,以确保在任务体中引发异常时正确处理资源。原创 2024-09-18 00:15:00 · 1013 阅读 · 0 评论 -
windows C++ 并行编程-PPL 中的取消操作(三)
并行模式库 (PPL) 中取消操作的角色、如何取消并行工作以及如何确定取消并行工作的时间。运行时使用异常处理实现取消操作。请勿在代码中捕捉或处理这些异常。此外,还建议你在任务的函数体中编写异常安全的代码。例如,可以使用获取资源即初始化 (RAII) 模式,以确保在任务体中引发异常时正确处理资源。原创 2024-09-17 00:15:00 · 887 阅读 · 0 评论 -
windows C++ 并行编程-PPL 中的取消操作(二)
并行模式库 (PPL) 中取消操作的角色、如何取消并行工作以及如何确定取消并行工作的时间。运行时使用异常处理实现取消操作。请勿在代码中捕捉或处理这些异常。此外,还建议你在任务的函数体中编写异常安全的代码。例如,可以使用获取资源即初始化 (RAII) 模式,以确保在任务体中引发异常时正确处理资源。原创 2024-09-17 00:15:00 · 829 阅读 · 0 评论 -
windows C++ 并行编程-PPL 中的取消操作(一)
并行模式库 (PPL) 中取消操作的角色、如何取消并行工作以及如何确定取消并行工作的时间。运行时使用异常处理实现取消操作。请勿在代码中捕捉或处理这些异常。此外,还建议你在任务的函数体中编写异常安全的代码。例如,可以使用获取资源即初始化 (RAII) 模式,以确保在任务体中引发异常时正确处理资源。原创 2024-09-16 00:15:00 · 763 阅读 · 0 评论 -
windows C++ 并行编程-并行容器和对象
并行模式库 (PPL) 包括几个容器和对象,这些容器和对象提供对其元素的线程安全访问。并发容器提供对最重要操作的并发安全访问。在这里,并发安全意味着指针或迭代器始终有效。它不保证元素初始化或特定的遍历顺序。这些容器的功能与 C++ 标准库提供的功能类似。例如,concurrency::concurrent_vector 类与 std::vector 类类似,但 concurrent_vector 类允许并行追加元素。如果并行代码需要对同一容器进行读写访问,请使用并发容器。并发对象在组件之间并发共享。原创 2024-09-15 00:15:00 · 563 阅读 · 0 评论 -
windows C++ 并行编程-编写 parallel_for_each 循环
示例1演示如何使用 concurrency::parallel_for_each 算法并行计算 std::array 对象中的质数计数;示例2演示了如何使用 concurrency::parallel_transform 和 concurrency::parallel_reduce 算法以及 concurrency::concurrent_unordered_map 类计数文件中的单词出现次数。原创 2024-09-15 00:15:00 · 993 阅读 · 0 评论 -
windows C++ 并行编程-编写parallel_for 循环
此示例并行化外部循环只是因为它执行了足够的工作,可从并行处理的开销中受益。如果将内部循环并行化,你将不会获得性能提升,因为内部循环执行的少量工作并不能克服并行处理的开销问题。以下示例演示了该 parallel_matrix_multiply 函数,该函数使用 parallel_for 算法并行执行外部循环。以下更完整的示例比较了 matrix_multiply 函数与 parallel_matrix_multiply 函数的性能。以下示例显示了 matrix_multiply 函数,可计算两个方阵的乘积。原创 2024-09-14 03:45:00 · 593 阅读 · 0 评论 -
windows C++-并行编程-并行算法(五) -选择排序算法
并行模式库 (PPL) 提供了对数据集合并行地执行工作的算法。这些算法类似于 C++ 标准库提供的算法。并行算法由并发运行时中的现有功能组成。原创 2024-09-14 03:30:00 · 878 阅读 · 0 评论