-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy paththreadbox.c
More file actions
42 lines (37 loc) · 1.11 KB
/
threadbox.c
File metadata and controls
42 lines (37 loc) · 1.11 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
#include "threadbox.h"
#include <stdio.h>
threadbox_t threadbox_create() {
return (threadbox_t) {
.thread = 0,
.taskFn = NULL,
.pTaskData = NULL,
.isRunning = false
};
}
void threadbox_set_task_function(threadbox_t* pThreadbox, threadbox_task_fn taskFn) {
pThreadbox->taskFn = taskFn;
}
void threadbox_set_task_data(threadbox_t* pThreadbox, void* pTaskData) {
pThreadbox->pTaskData = pTaskData;
}
bool threadbox_task_run(threadbox_t* pThreadbox) {
if (NULL == pThreadbox->taskFn) {
fprintf(stderr, "No task function specified\n");
return false;
}
if (0 != pthread_create(&pThreadbox->thread, NULL, pThreadbox->taskFn, pThreadbox->pTaskData)) {
fprintf(stderr, "Failed to create thread\n");
return false;
} else {
pThreadbox->isRunning = true;
return true;
}
}
void threadbox_task_kill(threadbox_t* pThreadbox) {
if (pThreadbox->isRunning && 0 != pThreadbox->thread) {
pthread_cancel(pThreadbox->thread);
pThreadbox->thread = 0;
} else {
fprintf(stderr, "No thread to kill\n");
}
}