社区
C++ 语言
帖子详情
STL不能用于多线程的程序中?
register_jhb
2005-10-02 05:35:26
好像看过STL不能用于多线程的程序中,STL不支持多线程?
是这样的吗?那写多线程程序要麻烦了。
...全文
363
10
打赏
收藏
STL不能用于多线程的程序中?
好像看过STL不能用于多线程的程序中,STL不支持多线程? 是这样的吗?那写多线程程序要麻烦了。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
healer_kx
2005-10-03
打赏
举报
回复
用STLPort了。 可以支持多线程的。
K
2005-10-03
打赏
举报
回复
有多线程版
tb01412
2005-10-03
打赏
举报
回复
你用线程同步或互斥机制不就解决了吗???
fiftymetre
2005-10-03
打赏
举报
回复
楼上的说的是对的 偶来补充
STLPort是一套C++模板库,BCB6集成的正是此库的早期版本。虽然STLPort并没有100%完整支援
ANSI标准的规定,但是从宝蓝肯采用此模版库作为标准配备可见其自有独到一面!现在我谈一下
我编译以及使用此开发库的感受。不过我要说明的是,我是一个C程序设计专家而不是C++,我的
体会或者说心得仅仅是如何在项目中使用并将其应用到项目中。
编译
环境配置
STLPort支持多平台下的常用编译器,可是说是包罗万象!在Windows下编译STLPort你要先注意三
点:1 修改vc98/bin下的vcvars32.bat ;2 不要试图使用 Platform SDK ;3 准备好调试符号!
为什么?请听我慢慢道来。
关于第一点,你需要根据你的平台修改,vcvars32.bat从命令行下进行编译。当然,你可以参照
makefile文档自己制作工程文件在IDE中编译,不过STLPort本身没这个文件!
包含路径在 set INCLUDE = 中追加STLPort目录下的stlport目录,例如:
set INCLUDE=F:\STLport\stlport;%MSVCDir%\ATL\INCLUDE;%MSVCDir%\INCLUDE;%MSVCDir%\
MFC\INCLUDE;%INCLUDE%
包含库路径在 set LIB= 中追加STLPort目录下的lib目录,例如:
set LIB=F:\STLport\lib;%MSVCDir%\LIB;%MSVCDir%\MFC\LIB;%LIB%
好了,第一点完成了!
关于第二点,大家注意到了我并没有包含进Platform SDK的更新过来,事实上我的机器中安装有此更
新的2003年2月版(支持Win2003新特性!)。我坚持不包含进来的原因是,在Platform SDK中更新过
的部分文件编译STLPort时无法正常工作。也不奇怪,微软这会儿正忙着猛推.NET来着!切忌不要用!
关于第三点,如果没有调试符号文件在编译DEBUG版本的时候会给你一个Link错误提示 :( 不过,即
使没有再执行一边nmake仍然可以输出文件,不过这样出来的文件能不能正常工作我就不知道了!
当你完成了上述三步之后,你日后可以继续用这个环境在命令行下编译你的STLPort程序。
makefile文件
在STLPort的src目录下存放了众多.mak文件,这些文件就是STLPort为其多平台多编译器支持所准备
的杰作。我们使用VC来编译可以根据编译器的版本选择不同的.mak文件:
VC.Net使用vc7.mak,VC5使用vc5.mak(STLPort官方测试支援),VC6的选择就相对多了一点,有三
个文件可以选择,用NT系列的选择vc6t.mak,用98之类的选择vc6.mak,需要获得unicode支援的就用
vc6-unicode.mak,vc6-unicode.mak是针对98编写的,虽然NT可以直接套用但是我自己还是小小的修
改了一下:将!INCLUDE vc_common.mak 替换为!INCLUDE vc_commont.mak。其实你如果你懂得规则完
全可以根据自己的需要编写一个.mak前端文件出来,STLPort为了方便自行编写makefile文件的开发人
员提供了一个名为build-tempinc-xlc.mk的模版文件。
用命令行在src目录下,执行copy 你选择的.mak makefile, 偷懒的在这个时候 nmake install就可
以连编译到安装一次解决!不过,还是多学点东西好,我继续讲我的。如果你在link它的DEBUG编译时
出现了link错误,不要灰心你可以再执行一边刚才的命令(强烈不推荐!)或者自定义编译。
** 这一步你不copy直接 nmake -f xxx.mak 一样可以。
自定义编译
比如我讨厌Debug版,所以我就直接编译release。方法很简单,如果要编译一个静态库可以用:
nmake release_static
要编译一个动态库则用
nmake release_dynamic
注意了,自定义编译没有现成的install来用,要自己改makefile,太麻烦了。
安装
如果你是自定义编译那么必须看一下这里。
1 STLPort所产生的动态库DLL复制到system32(NT)或者system(98),目录下。
2 将stlport子目录复制到vc的include目录下。
3 将.lib .exp文件复制到vc的lib目录下。
如果你不打算删除stlport的源代码目录第2、3步是可选的,因为vcvars32.bat已经做了定位。否则你
最好还是顺便修改一下vcvars32.bat。
项目中的应用
1 无论怎样stlport必须处于INCLUDE目录的第一位。
2 动态库编译link stlport_vc6.lib 静态link stlport_vc6_static.lib。
3 如果使用动态库记得copystlport_????.dll到发布的程序中,否则,嘿嘿!你知道的!
完毕?
:)
xlsue
2005-10-03
打赏
举报
回复
比如:用vector<char>代替string
zzw820626
2005-10-03
打赏
举报
回复
msdn有关于标准模板库的线程安全的详细描述!
mp5li
2005-10-03
打赏
举报
回复
???
wvins
2005-10-03
打赏
举报
回复
mark
KingI
2005-10-03
打赏
举报
回复
mark
antter
2005-10-02
打赏
举报
回复
主要矛盾是线程安全
STL
容器线程安全
标准C++的世界是相当保守和精简的。在这个纯洁的世界,所有可执行文件都是静态链接的。不存在内存映射文件和共享内存。...当然,
多线程
程序
是很普遍的,所以大部分
STL
厂商努力使他们的实现在线程环境
中
可以正常工作。但
effective
STL
关于
STL
容器的线程安全特性
标准C++的世界是相当保守和精简的。在这个纯洁的世界,所有可执行文件都是静态链接的。不存在内存映射文件和共享... 当然,
多线程
程序
是很普遍的,所以大部分
STL
厂商努力使他们的实现在线程环境
中
可以正常工作。但是
DLL的
多线程
在DLL
中
可以处理
多线程
,WIN32对于
多线程
的支持是操作系统本身提供的一种能力,并不在于用户编写的是哪一类
程序
。即便是一个控制台
程序
,我们都可以使用
多线程
: #include #include void ThreadFun(void) { while...
多线程
原理、线程安全函数和
多线程
程序
需要注意的问题
多线程
的主要是需要处理大量的IO操作或者处理的情况需要花大量的时间等等,比如读写文件,网络数据接收,视频图像的采集,处理显示保存等操作缓慢的情形和需大幅度的提高性能的
程序
中
使用。 但也不是都使用
多线程
,...
STL
线程安全问题--effective
stl
条款12:对
STL
容器线程安全性的期待现实一些 标准C++的世界是相当保守和陈旧的。在这个纯洁的世界,所有可执行文件都是静态链接的。不存在内存映射文件和...当然,
多线程
程序
是很普遍的,所以大部分
STL
厂商努力使他
C++ 语言
64,651
社区成员
250,492
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章