相关疑难解决方法(0)

mingw-w64主题:posix vs win32

我正在Windows上安装mingw-w64,有两个选项:win32线程和posix线程.我知道win32线程和pthreads之间的区别是什么,但我不明白这两个选项之间的区别.我怀疑如果我选择posix线程,它将阻止我调用WinTI函数,如CreateThread.

看来这个选项指定某些程序或库将使用哪个线程API,但是通过什么?通过GCC,libstdc ++还是别的什么?

我发现了这个: 在windows的gcc端口中thread_posixs和thread_win32之间的区别是什么?

简而言之,对于这个版本的mingw,threads-posix版本将使用posix API并允许使用std :: thread,而threads-win32将使用win32 API,并禁用std :: thread部分标准.

好的,如果我将选择win32线程,那么std :: thread将不可用,但仍将使用win32线程.但用什么?

windows gcc mingw pthreads

103
推荐指数
3
解决办法
9万
查看次数

mingw-w64安装程序中选项的含义

在MinGW-W64在线安装程序中,您可以选择几个字段.但是我找不到任何关于此的文件,我所做的猜测并没有给我我想要的行为.

很明显,很多工作已经进入这个项目,所以很可惜因为缺乏基本文档而受到阻碍.

"版本"和"架构"字段是不言自明的,但我遇到的其他字段是(显示为当前安装程序的值):

  • 线程,选项posixwin32
  • 例外,选项dwarfsjlj
  • 建立修订,期权0,1,2.

我在之前的安装中选择的值是win32,seh并且1(从那时起显然选项已经改变,但我不知道什么是什么).

每个选项的优缺点是什么,特别是线程模型和异常处理,以及哪个版本"最佳"?

我遇到的具体问题x86_64-win32-seh-rev1是:

  • std::thread并且std::condition_variable不受支持
  • 在调试时(使用Code :: Blocks作为IDE),如果抛出异常,它不会跳转到异常处理程序; 选择Next Line不做3次然后中止运行.

我可以解决调试问题但是使用C++ 11线程真的很棒.

windows g++ mingw-w64

41
推荐指数
1
解决办法
3万
查看次数

错误:'std :: this_thread'尚未声明

我尝试使用std :: this_thread :: sleep_for()函数,但得到了错误
error: 'std::this_thread' has not been declared.
标志_GLIBCXX_USE_NANOSLEEP包括在内.
还需要什么来强迫它发挥作用?
MinGW ==> gcc版本4.7.2(GCC)

SSCCE:

#include<thread>

int main() {
  std::this_thread::sleep_for(std::chrono::seconds(3));
}
Run Code Online (Sandbox Code Playgroud)

命令行:

g++ -D_GLIBCXX_USE_NANOSLEEP -std=gnu++0x ssce.cpp -o ssce.exe
Run Code Online (Sandbox Code Playgroud)

编译结果:

ssce.cpp: In function 'int main()':
ssce.cpp:4:8: error: 'std::this_thread' has not been declared
Run Code Online (Sandbox Code Playgroud)

c++ gcc mingw glibc c++11

11
推荐指数
1
解决办法
2万
查看次数

注意:'std :: thread'在头文件'&lt;thread&gt;'中定义;您忘记了“ #include &lt;thread&gt;”吗?

我尝试在c ++中编译一个简单的c ++代码,但是当我尝试在Windows中使用g ++编译它时,总是返回错误。

我用

g++ -std=c++0x -pthread main.cpp
Run Code Online (Sandbox Code Playgroud)

错误消息是:

std::thread' is defined in header '<thread>'; did you forget to '#include <thread>'?
Run Code Online (Sandbox Code Playgroud)

这没有意义,因为代码只是

#include<thread>

void f(int i) {}

int main() {
        std::thread t(f, 1);
        t.join();
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

我相信这段代码可以在linux上运行,我想知道为什么它不能在Windows下运行。

c++ multithreading g++ c++11

0
推荐指数
1
解决办法
288
查看次数

标签 统计

c++ ×2

c++11 ×2

g++ ×2

gcc ×2

mingw ×2

windows ×2

glibc ×1

mingw-w64 ×1

multithreading ×1

pthreads ×1