C++0x的标准库线程类用不了?

Houjun_pyc 2012-05-26 01:36:06
我用的IDE是qt creator,包含头文件的时候也有<thread>,但是用的时候就不行,比如std::thread就说thread不是std的成员,要是用using namespace std;就说没定义thread,明明都包含这个头文件了,不知道是什么原因,已经在qt中加了-std=c++0x,难道还需要什么么?
...全文
151 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Houjun_pyc 2012-05-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

有-d-为调试库?我怎么没记得这个,可能我从来没编译过boost的debug库。
另一个是release库

得看你命令行怎么写的,反正就是没加入库,要不就是错了
不过有_imp_开头的都是缺少动态库
而你的boost库看样子是静态库
那么你需要定义BOOST_THREAD_USE_LIB (类似,具体查文档,应该是这个)
boost属于跨平台,在使用thread的实现为本地win……
[/Quote]

谢谢!
xunxun 2012-05-26
  • 打赏
  • 举报
回复
有-d-为调试库?我怎么没记得这个,可能我从来没编译过boost的debug库。
另一个是release库

得看你命令行怎么写的,反正就是没加入库,要不就是错了
不过有_imp_开头的都是缺少动态库
而你的boost库看样子是静态库
那么你需要定义BOOST_THREAD_USE_LIB (类似,具体查文档,应该是这个)
boost属于跨平台,在使用thread的实现为本地win32线程,gcc是何线程无影响,gcc的线程实现只影响他自身的代码实现。
Houjun_pyc 2012-05-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

如果是win32线程,那么就不要使用std::thread,这是因为pthread-w32缺少部分posix实现

win32线程当然有个hacker方法使得std::thread生效,不过更改方法非常繁琐(还得自行实现部分代码),一句两句说不清。如果再加上那些time的,就更麻烦了。可以自行在MinGW邮件列表里搜索。

另一个解决方案是使用posix线程的gcc,不过需要重新编译Qt……
[/Quote]

嗯,我了解了一下posix线程和win32线程。我现在正在尝试用boost的thread库,我现在用这个线程编译的时候出错了。。。
我就这么一句boost::thread myThread(fun);
如下错误:
error: undefined reference to `_imp___ZN5boost6threadD1Ev'
error: undefined reference to `_imp___ZN5boost6thread12start_threadEv'
是编译的时候找不到具体的实现吧?但是我在前面已经加了libboost_thread-mgw46-mt-d-1_49.a,另外我发现还有个libboost_thread-mgw46-mt-1_49.a,不知道他俩什么区别,另外这个boost库的线程是不是也是posix线程?我现在Thread model是win32会不会有影响。望指导!
xunxun 2012-05-26
  • 打赏
  • 举报
回复
如果是win32线程,那么就不要使用std::thread,这是因为pthread-w32缺少部分posix实现

win32线程当然有个hacker方法使得std::thread生效,不过更改方法非常繁琐(还得自行实现部分代码),一句两句说不清。如果再加上那些time的,就更麻烦了。可以自行在MinGW邮件列表里搜索。

另一个解决方案是使用posix线程的gcc,不过需要重新编译Qt,因为ABI发生了更改
这个方面可以下载MinGW64的相关posix线程的gcc,Ruben一般都有说明哪个版本是posix线程,哪个是win32线程

不想重编译Qt的话,那么可以用其他的thread,比如boost的thread库

Houjun_pyc 2012-05-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

什么系统?什么编译器?


如果是GCC系列,只有posix线程才有std::thread

Linux下无障碍,Windows下需要使用winpthreads库重新编译gcc,并且使用posix线程,这个补丁我上一年已经发到MinGW64项目组

先看看gcc -v使用的Thread model是啥
[/Quote]
windows,gcc

看了一下,Thread model是win32,posix线程是什么?我现在需要怎么做?
xunxun 2012-05-26
  • 打赏
  • 举报
回复
什么系统?什么编译器?


如果是GCC系列,只有posix线程才有std::thread

Linux下无障碍,Windows下需要使用winpthreads库重新编译gcc,并且使用posix线程,这个补丁我上一年已经发到MinGW64项目组

先看看gcc -v使用的Thread model是啥

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧