Changeset 57 in libcf


Ignore:
Timestamp:
04/07/13 03:27:55 (11 years ago)
Author:
cheese
Message:

#1 fix thread interface

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/cf_thread.h

    r50 r57  
    1313#include "cf_base.h"
    1414
    15 #if defined(_WIN32) || defined(_WIN64)
    16 # define CF_THREAD_RETURN   unsigned int    /**< 스레드 워커 함수 반환 형 */
    17 # define CF_THREAD_CALL     __stdcall       /**< 스레드 워커 함수 호출 규약 */
    18 #else
    19 # define CF_THREAD_RETURN   void *          /**< 스레드 워커 함수 반환 형 */
    20 # define CF_THREAD_CALL                     /**< 스레드 워커 함수 호출 규약 */
    21 #endif
    22 
    2315/** 스레드 워커 함수 형태이며, CF_Thread_Function 형식 */
    24 typedef CF_THREAD_RETURN  (CF_THREAD_CALL * CF_Thread_Function) (void *);
     16typedef int (* CF_Thread_Function) (void *);
    2517
    2618/** 스레드 아이디 */
  • trunk/src/cf_thread.c

    r55 r57  
    1515# define THREAD_TYPE    HANDLE
    1616# define MUTEX_TYPE     HANDLE
     17# define THREAD_RETURN  unsigned long   /**< 스레드 워커 함수 반환 형 */
     18# define THREAD_CALL    __stdcall
    1719#else // #if defined(_WIN32) || defined(_WIN64)
    1820# include <pthread.h>
    1921# define THREAD_TYPE    pthread_t
    2022# define MUTEX_TYPE     pthread_mutex_t
     23# define THREAD_RETURN  void *          /**< 스레드 워커 함수 반환 형 */
     24# define THREAD_CALL
    2125#endif // #if defined(_WIN32) || defined(_WIN64)
    2226
     
    5761    int result = 0;
    5862
    59 #if defined(_WIN32) || defined(_WIN64)
    60     *threadID = (THREAD_TYPE) _beginthreadex (0, 0, callback, arg, 0, 0);
     63    THREAD_RETURN THREAD_CALL f = (THREAD_RETURN THREAD_CALL) callback;
     64
     65#if defined(_WIN32) || defined(_WIN64)
     66
     67    *threadID = (THREAD_TYPE) CreateThread (NULL, 0, f, arg, 0, NULL);
    6168    if (*threadID == NULL)
    6269        return CF_ERROR_THREAD_CREATE;
     
    6673        return CF_ERROR_THREAD_CREATE;
    6774
    68     result = pthread_create ((THREAD_TYPE *) *threadID, NULL, callback, arg);
     75    result = pthread_create ((THREAD_TYPE *) *threadID, NULL, f, arg);
    6976    if (result < 0)
    7077        return CF_ERROR_THREAD_CREATE;
  • trunk/test/test.c

    r56 r57  
    2929const char * file = "./log.txt";
    3030
    31 CF_THREAD_RETURN CF_THREAD_CALL test_log_mt (void * arg)
     31int test_log_mt (void * arg)
    3232{
    3333    static int cnt = 0;
     
    5252    CF_DEBUG_PRINT (stderr, "end %dth thread\n", th);
    5353
    54     return (CF_THREAD_RETURN)0;
     54    return 0;
    5555}
    5656
     
    171171}
    172172
    173 CF_THREAD_RETURN CF_THREAD_CALL socket_echo_server (void * arg)
     173int socket_echo_server (void * arg)
    174174{
    175175    int srvsock = *((int *)arg);
     
    184184    {
    185185        CF_DEBUG_PRINT (stderr, "failed to accept on server\n");
    186         return (CF_THREAD_RETURN)-1;
     186        return -1;
    187187    }
    188188    CF_Log_Write (LOG_SOCKET, "SERVER", "accepted\n");
     
    193193        {
    194194            CF_DEBUG_PRINT (stderr, "failed to recv on server\n");
    195             return (CF_THREAD_RETURN)-2;
     195            return -2;
    196196        }
    197197        CF_Log_Write (LOG_SOCKET, "SERVER", "recv {%s}\n", buf);
     
    199199        if (CF_Socket_Send (clntsock, buf, recvd) < 0)
    200200        {
    201             return (CF_THREAD_RETURN)-3;
     201            return -3;
    202202        }
    203203        CF_Log_Write (LOG_SOCKET, "SERVER", "resp {%s}\n", buf);
     
    206206    CF_Socket_Close (clntsock);
    207207
    208     return (CF_THREAD_RETURN)0;
    209     /*------------------------------------------------------------*/
    210 }
    211 
    212 CF_THREAD_RETURN CF_THREAD_CALL socket_echo_client (void * arg)
     208    return 0;
     209    /*------------------------------------------------------------*/
     210}
     211
     212int socket_echo_client (void * arg)
    213213{
    214214    int sock = 0;
     
    224224    {
    225225        CF_DEBUG_PRINT (stderr, "failed to connect on client\n");
    226         return (CF_THREAD_RETURN)-1;
     226        return -1;
    227227    }
    228228    CF_Log_Write (LOG_SOCKET, "CLIENT", "connected\n");
     
    233233        {
    234234            CF_DEBUG_PRINT (stderr, "failed to send on client %d\n", errno);
    235             return (CF_THREAD_RETURN)-2;
     235            return -2;
    236236        }
    237237        CF_Log_Write (LOG_SOCKET, "CLIENT", "sent {%s}\n", buf);
     
    242242        {
    243243            CF_DEBUG_PRINT (stderr, "failed to recv on client\n");
    244             return (CF_THREAD_RETURN)-3;
     244            return -3;
    245245        }
    246246        CF_Log_Write (LOG_SOCKET, "CLIENT", "recv {%s}\n", buf);
     
    249249    CF_Socket_Close (sock);
    250250
    251     return (CF_THREAD_RETURN)0;
     251    return 0;
    252252    /*------------------------------------------------------------*/
    253253}
  • trunk/test/thread.c

    r35 r57  
    1010CF_Mutex globalMutex;
    1111
    12 CF_THREAD_RETURN CF_THREAD_CALL worker (void * arg) {
     12int worker (void * arg) {
    1313    if (CF_Mutex_Lock (&globalMutex) < 0) { // for critical section
    1414        // error
     
    2121    }
    2222
    23     return (CF_THREAD_RETURN)0;
     23    return 0;
    2424}
    2525
Note: See TracChangeset for help on using the changeset viewer.