C语言宏的高级用法

#define START_THREAD(name,param) start_thread(get_thread_idx(#name), param)


#define JOIN_THREAD(name) join_thread(get_thread_idx(#name))


#define CHANGE_THREAD_PRIO(name, priority) change_thread_prio(get_thread_idx(#name), priority)


#define GET_THREAD_HANDLE(name) get_thread_handle(get_thread_idx(#name))


#define RESUME_THREAD(name) resume_thread(get_thread_idx(#name))


#define SUSPEND_THREAD(name) suspend_thread(get_thread_idx(#name))


#define THREAD_NO_PARAM        (0)




typedef pthread_t THREAD_HANDLE;

typedef void *THREAD_PARAMS;

typedef void *THREAD_RET;

typedef THREAD_RET (*THREAD_ROUTINE) (THREAD_PARAMS);


#define THREAD_RETURN(value) return ((void*)value)


#define DEFINE_THREAD_ROUTINE(NomRoutine,NomParams) THREAD_RET WINAPI thread_##NomRoutine(THREAD_PARAMS NomParams)



DEFINE_THREAD_ROUTINE(mobile_main, data)

{

 ...

}


DEFINE_THREAD_ROUTINE(ardrone_control, nomParams)

{

 ...    

}


DEFINE_THREAD_ROUTINE(navdata_update, nomParams)

{

    ...

}


DEFINE_THREAD_ROUTINE(video_recorder, data)

{

 ...

}


DEFINE_THREAD_ROUTINE(video_stage, data)

{

 ...

}



typedef struct

{

    char*           name;

    int32_t         priority;

    int32_t         stackSize;

    int8_t*         stack;

    THREAD_PARAMS   parameters;

    THREAD_ROUTINE  routine;

    THREAD_HANDLE   handle;

    DEFINE_CYG_THREAD

} thread_table_entry_t;



#define BEGIN_THREAD_TABLE  \

thread_table_entry_t threadTable[] = {


#define END_THREAD_TABLE    \

{ 0 }                   \

};


#define THREAD_TABLE_ENTRY(name, priority) \

{ #name, priority, 0, 0, THREAD_NO_PARAM, thread_##name, 0, DECLARE_CYG_THREAD },


BEGIN_THREAD_TABLE

THREAD_TABLE_ENTRY(mobile_main, AT_THREAD_PRIORITY)

THREAD_TABLE_ENTRY(ardrone_control, NAVDATA_THREAD_PRIORITY)

THREAD_TABLE_ENTRY(navdata_update, NAVDATA_THREAD_PRIORITY)

THREAD_TABLE_ENTRY(video_stage, VIDEO_THREAD_PRIORITY)

THREAD_TABLE_ENTRY(video_recorder, VIDEO_RECORDER_THREAD_PRIORITY)

END_THREAD_TABLE

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值