创建目录及文件
mkdir server_test
cd server_test
mkdir xserver
mkdir xthread
mkdir xcom
cd xthread
vim xthread.h
vim xthread.cpp
vim makefile
#生成动态链接库libxthread.so
make
cd ../xserver
vim xserver.cpp
vim makefile
#会影响其他库,只当前会话测试使用
export LD_LIBRARY_PATH=../xthread
./server
xthread.h
#ifndef DEMO_XTHREAD_H
#define DEMO_XTHREAD_H
#include <thread>
class XThread {
public:
virtual void Start();
virtual void Wait();
private:
virtual void Main() = 0;
std::thread th_;
};
#endif //DEMO_XTHREAD_H
xthread.cpp
#include "xthread.h"
#include <iostream>
using namespace std;
void XThread::Start() {
cout << "Start Thread" << endl;
th_ = std::thread(&XThread::Main, this);
}
void XThread::Wait() {
cout << "begin wait Thread" << endl;
th_.join();
cout << "end wait Thread" << endl;
}
xthread/makefile
TARGET=libxthread.so
OBJS=xthread.o
LDFLAGS=-shared
CXXFLAGS=-fPIC
LIBS=-pthread
$(TARGET):$(OBJS)
$(CXX) -std=c++11 $(LIBS) $(LDFLAGS) $^ -o $@
clean:
$(RM) $(TARGET) $(OBIS)
.PHONY: clean
xserver.cpp
#include <iostream>
#include "xthread.h"
using namespace std;
class XTask:public XThread {
void Main() override {
cout << "XTask main" << endl;
}
};
int main() {
cout << "XServer" << endl;
XTask task;
task.Start();
task.Wait();
}
xserver/makefile
TARGET=xserver
OBJS=xserver.o
CXXFLAGS=-std=c++11 -I../xthread
LDFLAGS=-L../xthread
LIBS=-lxthread
$(TARGET):$(OBJS)
$(CXX) -std=c++11 $^ -o $@ $(LDFLAGS) $(LIBS)
clean:
$(RM) $(TARGET) $(OBJS)