ae2f_docs
Loading...
Searching...
No Matches
thrdjoin.c
1#include <ae2f/Sys/Thrd.h>
2#include <ae2f/Cast.h>
3#include <stdio.h>
4#include <time.h>
5#include <assert.h>
6
7
8int A = 0;
9
11
12ae2f_SysThrdRes_t AThreadNotifier(ae2f_SysThrdPrm_t prm) {
13 struct timespec req, rem;
14 register long done;
15
16
17 (void)prm; /** ignore */
18
19 req.tv_sec = 0;
20 req.tv_nsec = 4000;
21
22 printf("Thread child is starting\n");
23
24 _ae2f_SysThrdSleep_imp(done, &req, &rem);
25
26 (void)done;
27 A = 1;
28
29 printf("Thread child is ending\n");
31}
32
33int main(void) {
34 register ae2f_eSysThrd_t ret_stat = 0;
35 ae2f_SysThrd ret_thrd0, ret_thrd1;
36
37 ae2f_SysThrdRes_t ret_rtn;
38 register union {
39 void* m_v;
41 } id_for_printf;
42
43
44 ret_rtn = 0;
45
46 puts("Thread main is starting");
47
48#if 1
50 ret_stat
51 , ret_thrd0
52 , AThreadNotifier
53 , NULL
54 , 1024 * 1024
55 );
56
58 ret_stat
59 , ret_thrd1
60 , AThreadNotifier
61 , NULL
62 , 1024 * 1024
63 );
64#else
65#endif
66
67 puts("Thread main has made a thread");
68 printf("ret_stat: %u\n", ae2f_reinterpret_cast(unsigned int, ret_stat));
69
70
72 ret_stat
73 , ret_rtn
74 , ret_thrd0
75 );
76
77 id_for_printf.m_id = (ret_thrd0).m_id;
78
79 printf(
80 "Thread main joined %p with retval %d\n"
81 , id_for_printf.m_v
82 , ae2f_static_cast(int, ret_rtn)
83 );
84
86 ret_stat
87 , ret_rtn
88 , ret_thrd1
89 );
90
91
92 id_for_printf.m_id = (ret_thrd1).m_id;
93
94 printf(
95 "Thread main joined %p with retval %d\n"
96 , id_for_printf.m_v
97 , ae2f_static_cast(int, ret_rtn)
98 );
99
100
101
102 puts("Thread main is ending");
103
104 assert(A == 1);
105 puts("GOOD");
106
107 return 0;
108}
#define ae2f_static_cast(t, v)
static_cast for C++
Definition Cast.h:28
#define ae2f_reinterpret_cast(t, v)
reinterpret_cast for C++
Definition Cast.h:36
#define _ae2f_SysThrdJoin_imp(ret_stat, ret_rtn, ref_thrd)
Definition Thrd.auto.h:337
#define _ae2f_SysThrdSleep_imp(ret_stat, prm_req, prm_rem)
Definition Thrd.auto.h:365
#define _ae2f_SysThrdMk_imp(ret_stat, ret_thrd, prm_func, prm_arg, prm_stcksz_unused)
Definition Thrd.auto.h:301
_ae2f_SysThrdRes_t ae2f_SysThrdRes_t
Return type for thread.
Definition Thrd.h:14
_ae2f_SysThrdPrm_t ae2f_SysThrdPrm_t
Parameters for thread.
Definition Thrd.h:18
_ae2f_SysThrdID_t ae2f_SysThrdID_t
Thread ID.
Definition Thrd.h:22
ae2f_SysThrdID_t m_id
Definition Thrd.h:55