3
|
1 #include "TaskManagerImpl.h"
|
|
2
|
|
3 void
|
|
4 noaction(void)
|
|
5 {
|
|
6 }
|
|
7
|
|
8 TaskManagerImpl::TaskManagerImpl(int num)
|
|
9 {
|
|
10 machineNum = num;
|
|
11 }
|
|
12
|
|
13 HTaskPtr
|
|
14 TaskManagerImpl::create_task(int cmd, int size,
|
|
15 unsigned long long in_addr,
|
|
16 unsigned long long out_addr,
|
|
17 void (*func)(void))
|
|
18 {
|
|
19 HTaskPtr new_task;
|
|
20
|
|
21 new_task = taskInfo->get_free_task(cmd, size, in_addr, out_addr);
|
|
22
|
|
23 if (func == NULL) {
|
|
24 new_task->post_func = noaction;
|
|
25 } else {
|
|
26 new_task->post_func = func;
|
|
27 }
|
|
28
|
|
29 return new_task;
|
|
30 }
|
|
31
|
|
32 /**
|
|
33 * task の依存関係を設定
|
|
34 * master task が終わってから、slave task を実行するように
|
|
35 */
|
|
36 void
|
|
37 TaskManagerImpl::set_task_depend(HTaskPtr master, HTaskPtr slave)
|
|
38 {
|
|
39 TaskQueuePtr m, s;
|
|
40
|
|
41 m = taskInfo->get_free_taskQueue(master);
|
|
42 s = taskInfo->get_free_taskQueue(slave);
|
|
43
|
|
44 master->wait_me = append_taskQueue(master->wait_me, s);
|
|
45 slave->wait_i = append_taskQueue(slave->wait_i, m);
|
|
46 }
|
|
47
|
|
48 void
|
|
49 TaskManagerImpl::run_task(HTaskPtr task)
|
|
50 {
|
|
51 if (task->wait_i == NULL) {
|
|
52 taskInfo->append_activeTask(task);
|
|
53 } else {
|
|
54 taskInfo->append_waitTask(task);
|
|
55 }
|
|
56 }
|