/* スレッドオブジェクト */
pthread_t task;
int init_module(void){
/* スレッド属性オブジェクト */
pthread_attr_t attr;
/* スケジューリングパラメータ */
struct sched_param sched_param;
/* スレッド属性オブジェクトattrの初期化 */
pthread_attr_init (&attr);
/* スケジューリングパラメータにプライオリティ値を設定 */
sched_param.sched_priority = 4;
/* プライオリティ値をスレッド属性オブジェクトに設定する */
pthread_attr_setschedparam (&attr, &sched_param);
/* thread_code という関数をスレッドとして生成
最後の(void *)1 はスレッドに渡す引数.*/
ret = pthread_create (&task, &attr,
thread_code, (void *)1);
}
void *thread_code(void t){
/* 実行周期を第三引数でナノ秒単位で指定 */
pthread_mask_periodic(pthread_self(), gethrtime,
500000)
while (done){
/* 次の実行周期まで待つ.
実行周期はpthread_make_periodic_np で指定する.*/
pthread_wait_np()
/* 周期実行を一次停止する.*/
pthread_suspend_np(pthread_self())
}
}
int my_handler(unsigned int fifo){
/* pthread_wait_np() しているスレッドを起こす.*/
pthread_wakeup_np()
}