c – std :: thread management:用法和最佳实践
发布时间:2020-12-16 10:43:59 所属栏目:百科 来源:网络整理
导读:我试图在 Java中使用它们之后弄清楚线程并且我有点困惑. 两个问题: 我可以从一个线程扩展我的类,还是我必须通过处理程序从类中管理线程? 如何保存所述线程处理程序? std :: thread in和它本身似乎没有命名一个类型. 任何正确方向的刺激都将非常感激. 我该
我试图在
Java中使用它们之后弄清楚线程并且我有点困惑.
两个问题: >我可以从一个线程扩展我的类,还是我必须通过处理程序从类中管理线程? 任何正确方向的刺激都将非常感激. 我该如何解释这条消息? src/CHandler.h:27:9: error: 'thread' in namespace 'std' does not name a type std::thread _thread; ^ 这是我尝试扩展线程: src/CHandler.h:17:30: error: expected class-name before '{' token class CHandler : std::thread { ^ 完整,麻烦的标题: #ifndef __projectm__CHandler__ #define __projectm__CHandler__ #include <set> #include <vector> #include <thread> #include "CListener.h" class CHandler { public: virtual bool subscribe(std::shared_ptr<CListener> aListener); virtual bool unsubscribe(std::shared_ptr<CListener> aListener); virtual bool hasSubscriber(std::shared_ptr<CListener> aListener); virtual ~CHandler() {} protected: std::thread _thread; std::vector<std::weak_ptr<CListener> > _subscribers; std::set<const CListener *> _subscribersSet; virtual void run(); }; #endif /* defined(__projectm__CDefaultHandler__) */ 编译器版本: bash-3.1$g++ --version g++.exe (GCC) 4.8.1 makefile(一团糟,我知道 – 还在学习这个血腥的东西): CC=g++ OUTFILE=game BINDIR=bin SRCDIR=src OBJDIR=obj CFLAGS= LDFLAGS=-std=c++0x all: core # Ядро проекта. core: $(OBJDIR)/main.o $(OBJDIR)/CGame.o $(OBJDIR)/CHandler.o $(OBJDIR)/CListener.o $(CC) $(CFLAGS) $(wildcard $(OBJDIR)/*.o) -o $(BINDIR)/$(OUTFILE) $(OBJDIR)/main.o: $(OBJDIR) $(CC) $(LDFLAGS) $(SRCDIR)/main.cpp -c -o $(OBJDIR)/main.o $(OBJDIR)/CGame.o: $(OBJDIR) $(CC) $(LDFLAGS) $(SRCDIR)/CGame.cpp -c -o $(OBJDIR)/CGame.o $(OBJDIR)/CHandler.o: $(OBJDIR) $(CC) $(LDFLAGS) $(SRCDIR)/CHandler.cpp -c -o $(OBJDIR)/CHandler.o $(OBJDIR)/CListener.o: $(OBJDIR) $(CC) $(LDFLAGS) $(SRCDIR)/CListener.cpp -c -o $(OBJDIR)/CListener.o # Создаем директорию для объектов,если ее нет. $(OBJDIR): mkdir $(OBJDIR) main.o: $(SRC)/main.cpp 解决方法
Bjarne Stroustrup在他的
C++11 FAQ中显示了
some examples of using
std::thread .最简单的例子如下所示:
#include<thread> void f(); struct F { void operator()(); }; int main() { std::thread t1{f}; // f() executes in separate thread std::thread t2{F()}; // F()() executes in separate thread } 通常,std :: thread不打算从中继承.您传递一个函数以在构造函数中异步执行. 如果你的编译器不支持std :: thread,你可以改用 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |