You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用mingw.thread实现C++多线程报错,求解决方案

解决C++多线程编译错误的方案

1. 先修复代码里的基础问题

你代码里犯了两个低级错误:

  • 重复定义了线程变量t1,第二个线程得改个名字,比如t2
  • 主线程没有等待子线程完成就直接退出,会导致程序异常终止

修正后的代码用标准库<thread>即可,不用再用第三方头文件:

#include <iostream>
#include <thread>

void task1(std::string msg)
{
    std::cout << "task1 says: " << msg << std::endl;
}

int main() {
    std::thread t1(task1, "Hello from thread 1");
    std::thread t2(task1, "Hello from thread 2"); 

    t1.join(); // 必须等待t1执行完
    t2.join(); // 必须等待t2执行完
    return 0;
}

2. 解决C++标准版本兼容问题

针对VS Code里的MSVC编译器

报错fatal error C1189: #error: A C++11 compiler is required!是因为编译器没启用C++11及以上标准:

  • 打开tasks.json配置文件,在编译参数里加上/std:c++11(或更高版本,比如/std:c++17),示例编译命令:
    cl /EHsc /std:c++17 program.cpp /o program.exe
    
  • 如果你的MSVC版本太老,直接更新到最新版的Visual Studio Build Tools,新版默认支持C++11及以上标准。

针对MinGW的g++编译器

旧版MinGW才需要用mingw.thread.h这种临时补丁,新版MinGW已经原生支持标准库<thread>,编译时必须加两个参数:

  • 指定C++标准版本:-std=c++11(推荐用-std=c++17)
  • 链接线程库:-pthread

完整编译命令:

g++ -std=c++17 program.cpp -o program.exe -pthread

如果你的MinGW版本太老,直接升级到支持C++11的版本,别再用第三方头文件了。

3. 彻底移除自定义头文件

删掉#include "PATH/mingw.thread.h",只用标准库的<thread>就行,只要编译器配置正确,标准线程库完全能正常工作。


内容的提问来源于stack exchange,提问作者Phicalc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 21:30:45