-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathslave.cpp
64 lines (45 loc) · 1.09 KB
/
slave.cpp
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
60
61
62
63
64
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <pvm3.h>
#include <list>
#include "app.h"
#include "tids.h"
#include "joblist.h"
#include "monitor.h"
using std::list;
int main(int argc, char *argv[]) {
char resume;
int procNo, slaveNum, jobNum, msgNum;
HaltState resumeState;
Tids tids;
JobList jobList;
list<Msg> msgSaved;
App *app = NULL;
pvm_recv(pvm_parent(), INIT);
pvm_upkint(&procNo, 1, 1);
pvm_upkint(&slaveNum, 1, 1);
tids.resize(slaveNum);
pvm_upkint(tids.data(), tids.size(), 1);
pvm_upkint(&jobNum, 1, 1);
jobList.resize(jobNum);
pvm_upkbyte((char *) jobList.data(), sizeof(Oper) * jobList.size(), 1);
pvm_recv(pvm_parent(), RESUME);
pvm_upkbyte(&resume, 1, 1);
if (resume) {
Msg newMsg;
pvm_upkbyte((char *) &resumeState, sizeof(resumeState), 1);
pvm_upkint(&msgNum, 1, 1);
for (int i = 0; i < msgNum; ++i) {
pvm_upkbyte((char *) &newMsg, sizeof(Msg), 1);
msgSaved.push_back(newMsg);
}
}
app = new Monitor(procNo, jobList, tids);
if (resume)
app->resume(resumeState, msgSaved);
app->run();
pvm_exit();
delete app;
return 0;
}