src.dualinventive.com/mtinfo/tcpserver/legacy/lib/include/di-util/cp3000-thread.h

87 lines
2.1 KiB
C

/*
************************************************************************
**
** Copyright (c) 2010 by
** Core|Vision B.V.
** Cereslaan 10b
** 5384 VT Heesch
** The Netherlands
**
** All Rights Reserved
**
************************************************************************
*/
/*
************************************************************************
**
** Project name: Dual Inventive: Utility Library
** Filename: cp3000-thread.h
** Author: Jack Weeland
** Date: February 26, 2010
** File version: 1.00 of February 26, 2010
**
************************************************************************
*/
/*
************************************************************************
**
** CP3000 multi-threading
**
************************************************************************
*/
#ifndef __CP3000_THREAD_H
#define __CP3000_THREAD_H
#include <sys/time.h> // for struct timeval
/*
** Type definitions
*/
// structure to hold information about a thread
typedef struct CP3000_THREAD_CTX *cp3000_thread_t;
// thread function; called when the thread is started
typedef int (*cp3000_thread_fcn_t)(void*);
// mutex (locally to a process)
typedef struct CP3000_THREAD_MUTEX *cp3000_mutex_t;
/*
** Exported functions - threads
*/
// Start a thread
cp3000_thread_t cp3000_start_thread(cp3000_thread_fcn_t, void *args);
// Destroy a thread
int cp3000_destroy_thread(cp3000_thread_t);
// Wait for a thread to end
// Parameters:
// thread context
// time-out (or NULL if time-out not requested)
// Returns:
// Return value from the thread functions, or TCPERR_TIMEOUT when the
// time-out expired
int cp3000_wait_thread(cp3000_thread_t, struct timeval*);
// Get thread exit status and run time
int cp3000_get_thread_exit(cp3000_thread_t);
int cp3000_get_thread_time(cp3000_thread_t, struct timeval*);
/*
** Exported functions - mutexes
*/
// Create and destroy a mutex
cp3000_mutex_t cp3000_init_mutex();
int cp3000_destroy_mutex(cp3000_mutex_t);
// Locking and unlocking (return value is not very interesting)
int cp3000_lock_mutex(cp3000_mutex_t);
int cp3000_unlock_mutex(cp3000_mutex_t);
#endif /* __CP3000_THREAD_H */