linux下JThread编译及其HelloWorld

  为什么要用JThread呢,往简单的说,我们的程序经常要考虑多线程的问题,跨平台编译的问题,奈何Win32和linux下的多线程写法差别相当的大,我们只好使用相当丑陋的

#ifdef WIN32
#else
#endif

 这样的代码如果只是几句也无所谓,要是多了的话搞得我们自己都不知道最主要的意图是什么了,而我们选择JThread的话,就不用被这个苦恼了

往小的方面想,很多开源项目也依赖于其他一些开源项目,比如,JRtp就依赖JThread;所以装一下这个库也挺有用的吧


好了,先下载源码或者到这里http://research.edm.uhasselt.be/~jori/page/index.php?n=CS.Jthread

 

解压一下

tar -xvf jrtplib-3.7.1.tar.bz2

我一般喜欢选择默认安装,即把这些库安装到/usr/local里面,所以

./configure

make
make install
完成后记得确认一下,是不是将这个库放入
共享库搜索路径

不然编译完成后执行过程中你会收到这个错误
error   while   loading   shared   libraries:   libjthread-1.2.1.so:   cannot   open   shared   object   file:   No   such   file   or   directory

共享库的搜索路径
可以将so复制到/usr/lib或者将其所在目录添加到/etc/ld.so.conf

然后

ldconfig   -v

我使用的是后者


或者这样执行你的程序:
LD_LIBRARY_PATH=/usr/local/lib ./run

好了,现在可以动手写个关于JThread的HelloWorld了

ContractedBlock.gif ExpandedBlockStart.gif myfunc.h
#ifndef _MYFUNC_H_
#define _MYFUNC_H_

#include 
<jthread.h>

int print_func();

class mythread:public JThread{
public:
    
void *Thread() ;
};

#endif


ContractedBlock.gif ExpandedBlockStart.gif myfunc.cpp
#include <iostream>
#include 
<string>
#include 
"myfunc.h"

int print_func(){
    sleep(
1);
    std::cout 
<< "hello!" << std::endl;
    
return 0;
}


void *mythread::Thread(){
    JThread::ThreadStarted();
    print_func();
    
return 0;
}


只有几行的main函数

ContractedBlock.gif ExpandedBlockStart.gif main.cpp
#include <iostream>
#include 
"myfunc.h"      


int main(){  
    sleep(
1);            
    
    
//先运行一下看一下
    std::cout << "创建线程" << std::endl;

    mythread arr_t[
10];
    
for(int i=0;i<10;i++){    
        arr_t[i].Start();
    }
    
    std::cout 
<< "OVER!" <<  std::endl; 
    sleep(
1);
    
return 0;            
}

 

然后就是 makefile

ContractedBlock.gif ExpandedBlockStart.gif makefile
objects = myfunc.o main.o
CXXFLAGS 
=  -I/usr/local/include/jthread -g
COMMLIB 
=  -lstdc++ -L/usr/local/lib -ljthread -lpthread 
run : 
$(objects)
    g
++ -o run $(objects) $(COMMLIB)
main.o:myfunc.h          
myfunc.o:myfunc.cpp myfunc.h
    gcc 
-c myfunc.cpp $(CXXFLAGS) 

.PHONY : clean
clean:
    rm run 
$(objects)

 

 make一下

运行一下

./run

 

ContractedBlock.gif ExpandedBlockStart.gif run result
创建线程
OVER
!
hello
!
hello
!
hello
!
hello
!
hello
!
hello
!
hello
!
hello
!
hello
!
hello
!
linbc
@cheng-ubuntu:~/workspace/example_jthread$ 


 

 

转载于:https://www.cnblogs.com/linbc/archive/2009/03/02/1401643.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值