首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++多线程有关问题请问

2012-09-18 
C++多线程问题请教小弟刚开始学习写C++多线程的程序,有很多问题请教各位:1.在linux环境里写程序,C++中应该

C++多线程问题请教
小弟刚开始学习写C++多线程的程序,有很多问题请教各位:

1.在linux环境里写程序,C++中应该包含哪个头文件处理多线程呢?是不是<pthread.h>?这个看上去像C的库文件,有没有对应的C++版本的头文件呢?如果使用这个头文件在linux下编写出来之后,源代码放在windows环境中(比如VisualC++)需不需要改动,能不能直接运行呢?

2.C++标准本身从语言级别上有没有像java的Thread以及Runnable类支持多线程的类呢?

3.具体问题是:
  我需要从一个文件路径中读取若干文件进行处理(包括解压+解码+输出解码后的文本三步),而且我需要一个线程(或者多个线程)从开始运行程序就处于监听状态,只要文件路径里有文件,就自动执行其余步骤;如果没有文件,则线程就进入休眠状态,隔一段时间再去查看文件路径是否有新文件需要处理。
  我现在的想法是:
  
  先生成一个线程池,里面一开始就产生一定数量的threads以备调用;
  然后定义一个类似java Runnable的class,这个class负责处理上面提到的三步处理,可能以成员函数形式出现;
  然后只要有新文件,就生成一个上述的class调用线程池的thread。

请大家多多指点!
  
 

[解决办法]
不会java,C++用线程我也是用的MFC
[解决办法]
1.pthread是posix线程,不是C标准头文件,这个库倒是跨平台,但Windows下和linux表现不一样,和Windows原生线程的性能差距也较大,据说_beginthread这个函数虽然也不是标准的,但gnu和微软的CRT扩展都有,试试,但是也存在win和linux线程模型不一致的问题。

线程方面Windows支持较好,linux说白了就是轻量进程。

2.到C++ 03为止,C、C++语言都没有自带线程库,C、C++标准库是极其贫乏的,请记住,不带第三方库基本干不了什么事。

3.Windows API自己就提供了线程池,linux方面要用第三方库或自己实现
[解决办法]
C++语言(标准)本身是没有线程支持库的,线程支持库一般与系统有关,除了用系统支持的线程函数你可以考虑使用C++ Threads(http://threads.sourceforge.net/) boost(http://www.boost.org/)或ZThreads(http://zthread.sourceforge.net/)等
[解决办法]
1.pthread虽然号称是跨平台,windows下也有它的实现,但一般都用windows自己的的线程库

2.c++语言本身没有线程的概念,而是留给了操作系统去支持

3.可以用线程池,另外线程间同步可以用互斥锁,信号量等机制
[解决办法]

探讨
1.pthread是posix线程,不是C标准头文件,这个库倒是跨平台,但Windows下和linux表现不一样,和Windows原生线程的性能差距也较大,据说_beginthread这个函数虽然也不是标准的,但gnu和微软的CRT扩展都有,试试,但是也存在win和linux线程模型不一致的问题。

线程方面Windows支持较好,linux说白了就是轻量进程。

2.到C++ 03为止,……

[解决办法]
纯接分的!!!!
[解决办法]
windows下多线程一般直接用API的,CreateThread函数创建线程。pthread是posix标准,linux支持,windows好像没有这个。如果你觉得API难操作,可以用boost的thread,这个可以按你想要的样子,写一个线程池。
[解决办法]
windows下你就直接用那几个函数创建线程等等,pthread可以跨平台,只在Windows上用过,UP
[解决办法]
新一代c++0x会支持多线程的,可以参考boost库
[解决办法]
windows有3个子系统 API,一是OS/2(NT5.0之后不支持了,即win2000后),一是posix,一是win32。posix是操作系统标准,windows怎么可能没有?
至于性能,才几个线程哪用得着考虑创造线程所损害的那点。

我自己想当然认为c++的线程库应该用boost thread。

c++支持c语法,当然可以用pthread.h了。
[解决办法]
推荐一下boost.asio
[解决办法]
参考boost库
[解决办法]
linux下多线程编程,一般会用到posix库中的pthread
posix ,顾名思义嘛,Portable Operating System Interface for uniX,一般是用在linux|unix环境下 
在windows下也可以用,但是window是后期的扩展
在win下的多线程最好用windows自己的

JAVA,就是以跨平台为目的,把平台相关的部分,都扔给jvm去处理了,
才可以提取出IRunable,Thread这样的接口与类
我原来也做过一段时间JAVA
C++都把线程相关的内容,交给平台相关的库去处理了
很多跨平台的工具包,都是以性能为代价的
而选择C++的项目,大部分都是看重性能

POSIX没有内置的线程池实现,楼主要自己去实现了
我觉得,不是每一种线程数量多情况都要线程池的








[解决办法]
探讨
windows有3个子系统 API,一是OS/2(NT5.0之后不支持了,即win2000后),一是posix,一是win32。posix是操作系统标准,windows怎么可能没有?


至于性能,才几个线程哪用得着考虑创造线程所损害的那点。

我自己想当然认为c++的线程库应该用boost thread。

c++支持c语法,当然可以用pthread.h了。


[解决办法]
友情帮顶
[解决办法]
干嘛不用封装好的pthread~ 多线程&asio~ boost的精华
[解决办法]
膜拜一下。。。多线程是个大问题哦!

热点排行
Bad Request.