-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathScheduler.java
More file actions
62 lines (51 loc) · 1.91 KB
/
Scheduler.java
File metadata and controls
62 lines (51 loc) · 1.91 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
60
61
62
package eventscheduler;
public class Scheduler {
private static Event HighestEvent;
static Event[] copiedEvent;
static Event[] removedEvents;
// process priorities.
synchronized static void schedule(Event[] e) {
copiedEvent = Scheduler.copyEvent(e);
// find highest priority thread.
HighestEvent = findHighestEvent(e);
// examine the copied event threads array.
for (Event event : copiedEvent) {
// compare the event with its highest priority.
if (event != null && event.thrd != null && event.thrd.getPriority() == HighestEvent.thrd.getPriority()) {
copiedEvent = removeEvent(copiedEvent, event);
event.requestResume();
} else {
if (event != null)
event.requestSuspend();
}
}
}
// find the highest priority event
static Event findHighestEvent(Event[] e) {
HighestEvent = e[0];
for (Event event : e) {
if (event != null && event.thrd != null && event.thrd.getPriority() > HighestEvent.thrd.getPriority()) {
HighestEvent = event;
}
}
return HighestEvent;
}
// copy the events from main interface.
static Event[] copyEvent(Event[] e) {
copiedEvent = new Event[e.length]; // initialize the array.
for (int i = 0; i < e.length; i++) {
copiedEvent[i] = e[i];
}
return copiedEvent;
}
// remove specific event and return array list without it.
static Event[] removeEvent(Event[] eArr, Event e) {
removedEvents = new Event[eArr.length - 1];
for (int i = 0; i < eArr.length; i++) {
if (eArr[i] != null && !eArr[i].equals(e)) {
removedEvents[i] = eArr[i];
}
}
return removedEvents;
}
}