C++:Windows 多线程 简单示例

在 Windows 上使用 C++ 进行多线程编程通常涉及 Windows API 或标准线程库(C++11 及更高版本引入的 <thread>)。以下是如何使用这两种方法创建和管理线程的简要介绍。

使用 Windows API 进行多线程编程

Windows API 提供了一系列函数来创建和管理线程,如 CreateThread。以下是一个简单的例子:

cpp 复制代码
#include <windows.h>
#include <iostream>
 
// 线程函数
DWORD WINAPI ThreadFunction(LPVOID lpParam) {
    int threadNumber = *(reinterpret_cast<int*>(lpParam));
    std::cout << "Thread " << threadNumber << " is running." << std::endl;
    Sleep(2000); // 模拟一些工作
    std::cout << "Thread " << threadNumber << " is exiting." << std::endl;
    return 0;
}
 
int main() {
    const int numThreads = 5;
    HANDLE threads[numThreads];
    int threadParams[numThreads];
 
    // 创建线程
    for (int i = 0; i < numThreads; ++i) {
        threadParams[i] = i + 1;
        threads[i] = CreateThread(
            nullptr,       // 默认安全属性
            0,             // 默认堆栈大小
            ThreadFunction,// 线程函数
            &threadParams[i], // 传递给线程函数的参数
            0,             // 默认创建标志
            nullptr        // 不需要返回线程标识符
        );
 
        if (threads[i] == nullptr) {
            std::cerr << "Error creating thread " << i + 1 << std::endl;
            return 1;
        }
    }
 
    // 等待所有线程完成
    WaitForMultipleObjects(numThreads, threads, TRUE, INFINITE);
 
    // 关闭线程句柄
    for (int i = 0; i < numThreads; ++i) {
        CloseHandle(threads[i]);
    }
 
    return 0;
}

使用 C++11 标准库进行多线程编程

C++11 引入了 <thread> 库,使得多线程编程变得更加直观和跨平台。以下是一个使用 <thread> 的简单例子:

cpp 复制代码
#include <iostream>
#include <thread>
#include <vector>
 
// 线程函数
void threadFunction(int threadNumber) {
    std::cout << "Thread " << threadNumber << " is running." << std::endl;
    std::this_thread::sleep_for(std::chrono::seconds(2)); // 模拟一些工作
    std::cout << "Thread " << threadNumber << " is exiting." << std::endl;
}
 
int main() {
    const int numThreads = 5;
    std::vector<std::thread> threads;
 
    // 创建线程
    for (int i = 0; i < numThreads; ++i) {
        threads.emplace_back(threadFunction, i + 1);
    }
 
    // 等待所有线程完成
    for (auto& thread : threads) {
        thread.join();
    }
 
    return 0;
}

选择哪种方法?

Windows API:提供了更多的控制和底层访问,但代码通常更加复杂且特定于平台。

C++11 <thread>:更加简洁和跨平台,适合大多数应用场景。

对于大多数现代 C++ 项目,推荐使用 C++11 或更高版本的 <thread> 库,除非你有特定的需求需要使用 Windows API 的功能。

相关推荐
WaWaJie_Ngen11 小时前
【设计模式】工厂模式(Factory)
c++·设计模式·简单工厂模式·工厂方法模式·抽象工厂模式
埃伊蟹黄面11 小时前
深入理解STL关联容器:map/multimap与set/multiset全解析
开发语言·c++
「QT(C++)开发工程师」12 小时前
C++语言编程规范-风格
linux·开发语言·c++·qt
马拉萨的春天12 小时前
iOS的多线程下数据安全和内存泄漏以及工具使用监测内存泄漏
macos·ios·cocoa·多线程
CandyU212 小时前
C++ 学习 —— 02 - 排序算法
c++·学习·排序算法
浮灯Foden13 小时前
算法-每日一题(DAY18)多数元素
开发语言·数据结构·c++·算法·leetcode·面试
小龙报13 小时前
《算法每日一题(1)--- 第31场蓝桥算法挑战赛》
c语言·开发语言·c++·git·算法·学习方法
llz_11213 小时前
五子棋小游戏
开发语言·c++·算法
liulilittle13 小时前
在 Android Shell 终端上直接运行 OPENPPP2 网关路由配置指南
android·linux·开发语言·网络·c++·编程语言·通信
嵌入式小李.man14 小时前
C++第十三篇:继承
开发语言·c++