-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathparalleloperations.cpp
More file actions
59 lines (54 loc) · 2.03 KB
/
paralleloperations.cpp
File metadata and controls
59 lines (54 loc) · 2.03 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
53
54
55
56
57
58
59
#include "paralleloperations.h"
parallelOperations::parallelOperations(){
QRandomGenerator generator = QRandomGenerator::securelySeeded();
arraySize = 9000000;
array.resize(arraySize);
generator.generate(array.begin(), array.end());
}
QString parallelOperations::maxMin(qint16 thrNum){
threads.resize(thrNum);
for(int i = 0; i < thrNum; i++){
//threads[i] = QtConcurrent::run(this, ¶llelOperations::parallelMaxMin, arraySize/thrNum*i, arraySize/thrNum*(i+1));
threads[i] = QtConcurrent::run([&]{return this->parallelMaxMin(arraySize/thrNum*i, arraySize/thrNum*(i+1));});
}
for(auto i: threads){
i.waitForFinished();
}
QPair<qint32, qint32> result = checkPairs();
return "Maximum: "+QString::number(array.at(result.first))+"\tits id: "+QString::number(result.first)+"\n"
"Minimum: "+QString::number(array.at(result.second))+"\tits id: "+QString::number(result.second);
}
QPair<qint32, qint32> parallelOperations::parallelMaxMin(qint32 start, qint32 stop){
qint64 min,max;
QPair<qint32, qint32> ids;
min = array.at(start);
max = array.at(start);
for(int i = start; i < stop; i++){
if(array.at(i) > max){
max = array.at(i);
ids.first = i;
}
if(array.at(i) < min){
min = array.at(i);
ids.second = i;
}
}
return ids;
}
QPair<qint32, qint32> parallelOperations::checkPairs(){
qint32 min, max;
max = array.at(threads.at(0).result().first);
min = array.at(threads.at(0).result().second);
QPair<qint32, qint32> returnable;
for(int i = 1; i < threads.size(); i++){
if(array.at(threads.at(i).result().first) > max){
max = array.at(threads.at(i).result().first);
returnable.first = threads.at(i).result().first;
}
if(array.at(threads.at(i).result().second) < min){
min = array.at(threads.at(i).result().second);
returnable.second = threads.at(i).result().second;
}
}
return returnable;
}