c语言宏高级用法,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)

{

...

}

typedefstruct

{

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

你可能感兴趣的:(c语言宏高级用法)