-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcpuprocessor.cpp
More file actions
52 lines (45 loc) · 1.35 KB
/
Copy pathcpuprocessor.cpp
File metadata and controls
52 lines (45 loc) · 1.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include "cpuprocessor.h"
CPUProcessor::CPUProcessor(unsigned int bs, unsigned int bc, QObject *parent) :
QThread(parent), blockSize(bs), blocksCount(bc), blocksCountToProcess(0)
{
this->moveToThread(this);
subProcessors = new SubProcessor*[blocksCount];
for (unsigned int i = 0; i < blocksCount; i++)
{
subProcessors[i] = new SubProcessor(i, blockSize);
connect(subProcessors[i], SIGNAL(dataProcessed()), this, SLOT(blockProcessed()));
connect(this, SIGNAL(processBlock(float*,float*)), subProcessors[i], SLOT(processData(float*, float*)));
subProcessors[i]->start();
}
blocks = new float[blocksCount * blockSize];
results = new float[blocksCount];
}
CPUProcessor::~CPUProcessor()
{
for (unsigned int i = 0; i < blocksCount; i++)
{
subProcessors[i]->quit();
subProcessors[i]->wait();
delete subProcessors[i];
}
delete[] subProcessors;
delete[] results;
}
void CPUProcessor::run()
{
blockProcessed();
exec();
}
void CPUProcessor::blockProcessed()
{
if (blocksCountToProcess > 0)
blocksCountToProcess--;
if (blocksCountToProcess == 0)
{
emit dataProcessed();
delete[] blocks;
blocks = new float[blocksCount * blockSize];
blocksCountToProcess = blocksCount;
emit processBlock(blocks, results);
}
}