Browse Source
p2p::Host is worker rather than WebThree. Client is single worker. EthereumHost works.cl-refactor
Gav Wood
10 years ago
13 changed files with 220 additions and 195 deletions
@ -0,0 +1,63 @@ |
|||||
|
/*
|
||||
|
This file is part of cpp-ethereum. |
||||
|
|
||||
|
cpp-ethereum is free software: you can redistribute it and/or modify |
||||
|
it under the terms of the GNU General Public License as published by |
||||
|
the Free Software Foundation, either version 3 of the License, or |
||||
|
(at your option) any later version. |
||||
|
|
||||
|
cpp-ethereum is distributed in the hope that it will be useful, |
||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
GNU General Public License for more details. |
||||
|
|
||||
|
You should have received a copy of the GNU General Public License |
||||
|
along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
/** @file Worker.cpp
|
||||
|
* @author Gav Wood <i@gavwood.com> |
||||
|
* @date 2014 |
||||
|
*/ |
||||
|
|
||||
|
#include "Worker.h" |
||||
|
|
||||
|
#include <chrono> |
||||
|
#include <thread> |
||||
|
#include "Log.h" |
||||
|
using namespace std; |
||||
|
using namespace dev; |
||||
|
|
||||
|
void Worker::startWorking() |
||||
|
{ |
||||
|
cdebug << "startWorking for thread" << m_name; |
||||
|
Guard l(x_work); |
||||
|
if (m_work) |
||||
|
return; |
||||
|
cdebug << "Spawning" << m_name; |
||||
|
m_stop = false; |
||||
|
m_work.reset(new thread([&]() |
||||
|
{ |
||||
|
setThreadName(m_name.c_str()); |
||||
|
while (!m_stop) |
||||
|
{ |
||||
|
this_thread::sleep_for(chrono::milliseconds(1)); |
||||
|
doWork(); |
||||
|
} |
||||
|
cdebug << "Finishing up worker thread"; |
||||
|
doneWorking(); |
||||
|
})); |
||||
|
} |
||||
|
|
||||
|
void Worker::stopWorking() |
||||
|
{ |
||||
|
cdebug << "stopWorking for thread" << m_name; |
||||
|
Guard l(x_work); |
||||
|
if (!m_work) |
||||
|
return; |
||||
|
cdebug << "Stopping" << m_name; |
||||
|
m_stop = true; |
||||
|
m_work->join(); |
||||
|
m_work.reset(); |
||||
|
cdebug << "Stopped" << m_name; |
||||
|
} |
||||
|
|
@ -0,0 +1,49 @@ |
|||||
|
/*
|
||||
|
This file is part of cpp-ethereum. |
||||
|
|
||||
|
cpp-ethereum is free software: you can redistribute it and/or modify |
||||
|
it under the terms of the GNU General Public License as published by |
||||
|
the Free Software Foundation, either version 3 of the License, or |
||||
|
(at your option) any later version. |
||||
|
|
||||
|
cpp-ethereum is distributed in the hope that it will be useful, |
||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
GNU General Public License for more details. |
||||
|
|
||||
|
You should have received a copy of the GNU General Public License |
||||
|
along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
/** @file Worker.h
|
||||
|
* @author Gav Wood <i@gavwood.com> |
||||
|
* @date 2014 |
||||
|
*/ |
||||
|
|
||||
|
#pragma once |
||||
|
|
||||
|
#include <string> |
||||
|
#include <thread> |
||||
|
#include "Guards.h" |
||||
|
|
||||
|
namespace dev |
||||
|
{ |
||||
|
|
||||
|
class Worker |
||||
|
{ |
||||
|
protected: |
||||
|
Worker(std::string const& _name): m_name(_name) {} |
||||
|
virtual ~Worker() { stopWorking(); } |
||||
|
void startWorking(); |
||||
|
void stopWorking(); |
||||
|
bool isWorking() const { Guard l(x_work); return !!m_work; } |
||||
|
virtual void doWork() = 0; |
||||
|
virtual void doneWorking() {} |
||||
|
|
||||
|
private: |
||||
|
mutable Mutex x_work; ///< Lock for the network existance.
|
||||
|
std::unique_ptr<std::thread> m_work; ///< The network thread.
|
||||
|
bool m_stop = false; |
||||
|
std::string m_name; |
||||
|
}; |
||||
|
|
||||
|
} |
Loading…
Reference in new issue