使用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
相关产品推荐
相关产品推荐

