(file) Return to thread.h CVS log (file) (dir) Up to [OMI] / omi / protocol

File: [OMI] / omi / protocol / Attic / thread.h (download)
Revision: 1.2, Mon Jun 25 18:59:25 2012 UTC (11 years, 11 months ago) by mike
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +0 -0 lines
FILE REMOVED
1.0.2

/*
**==============================================================================
**
** Open Management Infrastructure (OMI)
**
** Copyright (c) Microsoft Corporation
** 
** Licensed under the Apache License, Version 2.0 (the "License"); you may not 
** use this file except in compliance with the License. You may obtain a copy 
** of the License at 
**
**     http://www.apache.org/licenses/LICENSE-2.0 
**
** THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
** KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED 
** WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, 
** MERCHANTABLITY OR NON-INFRINGEMENT. 
**
** See the Apache 2 License for the specific language governing permissions 
** and limitations under the License.
**
**==============================================================================
*/

#ifndef _omi_thread_h
#define _omi_thread_h

#include "config.h"
//#include <string.h>
#include <common.h>

#if !defined(CONFIG_OS_WINDOWS)
# include <pthread.h>
# include <unistd.h>
# include <sys/time.h>
# include <sys/types.h>
#endif

BEGIN_EXTERNC

typedef void* (MI_CALL *ThreadProc)(void* param);

#if defined(CONFIG_OS_WINDOWS)
typedef MI_Uint32           ThreadHandle;
typedef CRITICAL_SECTION    Mutex; 
#else
typedef pthread_t           ThreadHandle;
typedef pthread_mutex_t     Mutex; 
#endif

/* creates a thread; returns a handle. 
    each successful 'create-thread' has to be followed by 'close-thread-handle' */
MI_Result Thread_Create(
    ThreadProc proc,
    void*  proc_param,
    ThreadHandle*  selfOut);

/* closes thread handle and frees related system resources;
    optionally, may wait for thread to complete */
MI_Result Thread_Destroy(
    ThreadHandle  self,
    MI_Boolean wait );

/* returns ID of the current thread */
ThreadHandle  ThreadSelf();

/* Mutex operations */
MI_INLINE MI_Result Mutex_Init( Mutex* self )
{
#if defined(CONFIG_OS_WINDOWS)
    InitializeCriticalSection(self);
#else
    if (0 != pthread_mutex_init(self, NULL))
        return MI_RESULT_FAILED;
#endif
    return MI_RESULT_OK;
}

MI_INLINE MI_Result Mutex_Destroy( Mutex* self )
{
#if defined(CONFIG_OS_WINDOWS)
    DeleteCriticalSection(self);
#else
    if (0 != pthread_mutex_destroy(self))
        return MI_RESULT_FAILED;
#endif
    return MI_RESULT_OK;
}

MI_INLINE void Mutex_Lock( Mutex* self )
{
#if defined(CONFIG_OS_WINDOWS)
    EnterCriticalSection(self);
#else
    pthread_mutex_lock(self);
#endif
}

MI_INLINE void Mutex_Unlock( Mutex* self )
{
#if defined(CONFIG_OS_WINDOWS)
    LeaveCriticalSection(self);
#else
    pthread_mutex_unlock(self);
#endif
}

MI_INLINE void Sleep_ms(MI_Uint64 ms_sec)
{
#if defined(CONFIG_OS_WINDOWS)
    Sleep((DWORD)ms_sec);
#else
    struct timespec rqtp;

    rqtp.tv_sec = (long)(ms_sec/1000);
    rqtp.tv_nsec = (long)((ms_sec%1000)*1000*1000);

    nanosleep(&rqtp, NULL);
#endif
}

END_EXTERNC

#endif /* _omi_thread_h */

ViewCVS 0.9.2