LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1375|回复: 5

linux c++多线程问题

[复制链接]
发表于 2009-11-17 15:13:34 | 显示全部楼层 |阅读模式
大家好,我的问题是这样的,我在linux下用c++写了一个tcp socket类,用于连接一个服务器,由于需要不停连接,另一方面还要处理别的是钱能够,所以想到了用多线程(建立个线程不停调用connect),可是问题来了,我用的pthread_create这个函数,但是却出现第三个参数不匹配的问题,于是,我查了查google,发现这个函数本来是c语言里的,所以不支持调用类的成员函数,于是我把这个建立线程的函数定义到了我的类里,并且定义成静态函数,为了能够让它使用类里的其他成员变量,我又把所有成员变量都定义为static(这里不知道这样对不对),然后我编译g++ main.cpp -o main,结果呢,出现了链接错误,我又加上了参数-lpthread还是一样,头文件#include <pthread.h>什么的,我全加了,不解啊,请高手指教下,我这种需求一般在linux c++里怎么出的啊???
发表于 2009-11-17 16:31:36 | 显示全部楼层
首先要学好语文。。。

线程函数定义成类的静态成员函数没错,其他成员变量定义成static就没必要了,线程启动函数不是void *(*start_routine)(void*)么,可以传一个指针给线程函数,你把对象指针传进去就是了

链接错误谁知道你什么错误
回复 支持 反对

使用道具 举报

发表于 2009-11-19 09:43:30 | 显示全部楼层
网上找个例子编译下  不就知道了
回复 支持 反对

使用道具 举报

发表于 2009-11-19 11:14:34 | 显示全部楼层
Post by naga1003;2046839
大家好,我的问题是这样的,我在linux下用c++写了一个tcp socket类,用于连接一个服务器,由于需要不停连接,另一方面还要处理别的是钱能够,所以想到了用多线程(建立个线程不停调用connect),可是问题来了,我用的pthread_create这个函数,但是却出现第三个参数不匹配的问题,于是,我查了查google,发现这个函数本来是c语言里的,所以不支持调用类的成员函数,于是我把这个建立线程的函数定义到了我的类里,并且定义成静态函数,为了能够让它使用类里的其他成员变量,我又把所有成员变量都定义为static(这里不知道这样对不对),然后我编译g++ main.cpp -o main,结果呢,出现了链接错误,我又加上了参数-lpthread还是一样,头文件#include <pthread.h>什么的,我全加了,不解啊,请高手指教下,我这种需求一般在linux c++里怎么出的啊???



http://linuxsir.cn/bbs/thread359185.html

倒数第9行
回复 支持 反对

使用道具 举报

发表于 2009-11-21 12:47:03 | 显示全部楼层
用g++的话,直接用boost::thread库更方便。换成VC++也不用改
  1. #include <boost/thread/thread.hpp>
  2. #include <iostream>
  3. void hello()
  4. {
  5.   std::cout <<
  6.     "Hello world, I'm a thread!"
  7.     << std::endl;
  8. }
  9. int main(int argc, char* argv[])
  10. {
  11. //启动线程
  12.   boost::thread thrd(&hello);
  13.   //等待线程返回
  14.   thrd.join();
  15.   return 0;
  16. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2009-11-21 12:49:42 | 显示全部楼层
链接错误一般是次序问题,-lpthread要放在命令行末尾。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表