【发布时间】:2015-09-12 06:52:36
【问题描述】:
我想做一些线程基类。我编写了我认为应该可以工作的代码,它可以编译并运行,但它什么也不显示。我认为,问题出在回调中,但我可能是错的。那么,我的代码有什么问题?
class ThreadedBase
{
public:
ThreadedBase(bool start = false) : m_running(false) {
if (start)
this->start();
}
virtual ~ThreadedBase() {
m_running = false;
m_thread.join();
}
bool start(){
if (m_running) {
return false;
};
m_thread = std::thread(&ThreadedBase::run, this);
m_running = true;
return true;
};
bool stop(){
if (!m_running) {
return false;
};
m_running = false;
return true;
};
protected:
virtual void threadedBlock() = 0;
void run() {
while (m_running) {
threadedBlock();
}
}
private:
std::thread m_thread;
bool m_running;
};
class Test : public ThreadedBase
{
public:
Test(bool start = true) : ThreadedBase(start) {}
void threadedBlock() {
std::cout << "Task\n";
std::this_thread::sleep_for(std::chrono::milliseconds(500));
}
};
int main()
{
Test t(true);
t.start();
std::this_thread::sleep_for(std::chrono::seconds(100));
return 0;
}
【问题讨论】:
-
当您说“不显示任何内容”时,您的意思是它不显示命令提示符(或在您运行程序的任何位置)还是仅仅意味着它不显示任何文本?
-
不显示 (std::cout
标签: c++ multithreading c++11 pthreads