diff --git a/miner/miner.go b/miner/miner.go index d3b1f578a0..00c1d3a5ea 100644 --- a/miner/miner.go +++ b/miner/miner.go @@ -63,3 +63,19 @@ func (self *Miner) Stop() { func (self *Miner) HashRate() int64 { return self.worker.HashRate() } + +func (self *Miner) AddThreads(minerThreads int) int { + if minerThreads > 0 { + + for i := len(self.worker.agents); i < minerThreads+i; i++ { + self.worker.register(NewCpuMiner(i, self.pow)) + } + } + + return len(self.worker.agents) +} + +func (self *Miner) RemoveThreads(num int) int { + self.worker.unregister(num) + return len(self.worker.agents) +} diff --git a/miner/worker.go b/miner/worker.go index 21a0522e8a..179ccbceb3 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -115,6 +115,17 @@ func (self *worker) register(agent Agent) { agent.SetWorkCh(self.recv) } +func (self *worker) unregister(numremove int) { + totagents := len(self.agents) + if totagents == 0 || numremove < 1 { + return + } + if numremove > totagents { + numremove = totagents + } + self.agents = self.agents[0 : totagents-numremove] +} + func (self *worker) update() { events := self.mux.Subscribe(core.ChainHeadEvent{}, core.NewMinedBlockEvent{})