source: libcf/trunk/include/cf_thread.h@ 34

Last change on this file since 34 was 34, checked in by cheese, 11 years ago

#1 add example code for doxygen

File size: 3.4 KB
Line 
1/**
2 * @file cf_thread.h
3 * @author myusgun <myusgun@gmail.com>
4 * @version 0.1
5 *
6 * @remark 멀티스레드 및 뮤텍스 지원
7 *
8 * @section 샘플코드
9 * @code
10
11#include "cf_thread.h"
12
13CF_Mutex globalMutex;
14
15CF_THREAD_RETURN CF_THREAD_CALL worker (void * arg) {
16 if (CF_Mutex_Create (&globalMutex) < 0) {
17 // error
18 }
19
20 if (CF_Mutex_Lock (&globalMutex) < 0) { // for critical section
21 // error
22 }
23
24 // critical section
25
26 if (CF_Mutex_Unlock (&globalMutex) < 0) { // for critical section
27 // error
28 }
29
30 if (CF_Mutex_Destory (&globalMutex) < 0) {
31 // error
32 }
33}
34
35int main (void) {
36 CF_Thread tid;
37 if (CF_Thread_Create (&tid, worker, NULL) < 0) {
38 // error
39 }
40
41 if (CF_Thread_Join (&tid) < 0) { // block
42 // error
43 }
44
45 if (CF_Thread_Release (&tid) < 0) {
46 // error
47 }
48 return 0;
49}
50
51 * @endcode
52 */
53#ifndef __CF_THREAD_H__
54#define __CF_THREAD_H__
55
56#include "cf_base.h"
57
58#define CF_ERROR_THREAD_CREATE CF_ERROR_THREAD - 1
59#define CF_ERROR_THREAD_INVALID_ARGS CF_ERROR_THREAD - 2
60
61#define CF_ERROR_MUTEX_CREATE CF_ERROR_MUTEX - 1
62#define CF_ERROR_MUTEX_INVALID_ARGS CF_ERROR_MUTEX - 2
63
64#ifdef _WIN32
65# define CF_THREAD_RETURN unsigned int /**< 스레드 워커 함수 반환 형 */
66# define CF_THREAD_CALL __stdcall /**< 스레드 워커 함수 호출 규약 */
67#else // #ifdef _WIN32
68# define CF_THREAD_RETURN void * /**< 스레드 워커 함수 반환 형 */
69# define CF_THREAD_CALL /**< 스레드 워커 함수 호출 규약 */
70#endif // #ifdef _WIN32
71
72/** 스레드 워커 함수 형태이며, CF_Thread_Function 형식 */
73typedef CF_THREAD_RETURN (CF_THREAD_CALL * CF_Thread_Function) (void *);
74
75/** 스레드 아이디 */
76typedef void * CF_Thread;
77
78/** 뮤텍스 아이디 */
79typedef void * CF_Mutex;
80
81#ifdef __cplusplus
82extern "C" {
83#endif
84
85/**
86 * 스레드를 생성
87 *
88 * @return 성공 시, CF_OK; 실패 시, 오류 코드
89 *
90 * @param threadID 스레드 아이디 주소
91 * @param callback 스레드 워커 함수 이름
92 * @param arg 스레드 함수로 전달할 인자
93 */
94CF_EXPORT int
95CF_Thread_Create (CF_Thread * threadID,
96 CF_Thread_Function callback,
97 void * arg);
98
99/**
100 * 스레드 아이디를 해제
101 *
102 * @return 성공 시, CF_OK; 실패 시, 오류 코드
103 *
104 * @param threadID 스레드 아이디 주소
105 *
106 * @remark 스레드 아이디를 해제하는 것이며 워커 스레드가 종료되지 않음
107 */
108CF_EXPORT int
109CF_Thread_Release (CF_Thread * threadID);
110
111/**
112 * 스레드가 종료될 때 까지 대기
113 *
114 * @return CF_OK 반환
115 *
116 * @param threadID 스레드 아이디 주소
117 */
118CF_EXPORT int
119CF_Thread_Join (CF_Thread * threadID);
120
121/**
122 * 뮤텍스 생성
123 *
124 * @return 성공 시, CF_OK; 실패 시, 오류 코드
125 *
126 * @param mutex 뮤텍스 아이디 주소
127 *
128 * @see CF_Thread_Create
129 */
130CF_EXPORT int
131CF_Mutex_Create (CF_Mutex * mutex);
132
133/**
134 * 뮤텍스 해제
135 *
136 * @return 성공 시, CF_OK; 실패 시, 오류 코드
137 *
138 * @param mutex 뮤텍스 아이디 주소
139 */
140CF_EXPORT int
141CF_Mutex_Destory (CF_Mutex * mutex);
142
143/**
144 * 뮤텍스 잠금
145 *
146 * @return 성공 시, CF_OK; 실패 시, 오류 코드
147 *
148 * @param mutex 뮤텍스 아이디 주소
149 */
150CF_EXPORT int
151CF_Mutex_Lock (CF_Mutex * mutex);
152
153/**
154 * 뮤텍스 잠금 해제
155 *
156 * @return 성공 시, CF_OK; 실패 시, 오류 코드
157 *
158 * @param mutex 뮤텍스 아이디 주소
159 */
160CF_EXPORT int
161CF_Mutex_Unlock (CF_Mutex * mutex);
162
163#ifdef __cplusplus
164}
165#endif
166
167#endif // #ifndef __CF_THREAD_H__
Note: See TracBrowser for help on using the repository browser.