mirror of
https://github.com/holub/mame
synced 2025-05-30 09:33:05 +03:00
99 lines
2.6 KiB
C
99 lines
2.6 KiB
C
/** @file porttime.h portable interface to millisecond timer. */
|
|
|
|
/* CHANGE LOG FOR PORTTIME
|
|
10-Jun-03 Mark Nelson & RBD
|
|
boost priority of timer thread in ptlinux.c implementation
|
|
*/
|
|
|
|
/* Should there be a way to choose the source of time here? */
|
|
|
|
#ifdef WIN32
|
|
#ifndef INT32_DEFINED
|
|
// rather than having users install a special .h file for windows,
|
|
// just put the required definitions inline here. portmidi.h uses
|
|
// these too, so the definitions are (unfortunately) duplicated there
|
|
typedef int int32_t;
|
|
typedef unsigned int uint32_t;
|
|
#define INT32_DEFINED
|
|
#endif
|
|
#else
|
|
#include <stdint.h> // needed for int32_t
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#ifndef PMEXPORT
|
|
#ifdef _WINDLL
|
|
#define PMEXPORT __declspec(dllexport)
|
|
#else
|
|
#define PMEXPORT
|
|
#endif
|
|
#endif
|
|
|
|
/** @defgroup grp_porttime PortTime: Millisecond Timer
|
|
@{
|
|
*/
|
|
|
|
typedef enum {
|
|
ptNoError = 0, /* success */
|
|
ptHostError = -10000, /* a system-specific error occurred */
|
|
ptAlreadyStarted, /* cannot start timer because it is already started */
|
|
ptAlreadyStopped, /* cannot stop timer because it is already stopped */
|
|
ptInsufficientMemory /* memory could not be allocated */
|
|
} PtError; /**< @brief @enum PtError PortTime error code; a common return type.
|
|
* No error is indicated by zero; errors are indicated by < 0.
|
|
*/
|
|
|
|
/** real time or time offset in milliseconds. */
|
|
typedef int32_t PtTimestamp;
|
|
|
|
/** a function that gets a current time */
|
|
typedef void (PtCallback)(PtTimestamp timestamp, void *userData);
|
|
|
|
/** start a real-time clock service.
|
|
|
|
@param resolution the timer resolution in ms. The time will advance every
|
|
\p resolution ms.
|
|
|
|
@param callback a function pointer to be called every resolution ms.
|
|
|
|
@param userData is passed to \p callback as a parameter.
|
|
|
|
@return #ptNoError on success. See #PtError for other values.
|
|
*/
|
|
PMEXPORT PtError Pt_Start(int resolution, PtCallback *callback, void *userData);
|
|
|
|
/** stop the timer.
|
|
|
|
@return #ptNoError on success. See #PtError for other values.
|
|
*/
|
|
PMEXPORT PtError Pt_Stop(void);
|
|
|
|
/** test if the timer is running.
|
|
|
|
@return TRUE or FALSE
|
|
*/
|
|
PMEXPORT int Pt_Started(void);
|
|
|
|
/** get the current time in ms.
|
|
|
|
@return the current time
|
|
*/
|
|
PMEXPORT PtTimestamp Pt_Time(void);
|
|
|
|
/** pauses the current thread, allowing other threads to run.
|
|
|
|
@param duration the length of the pause in ms. The true duration
|
|
of the pause may be rounded to the nearest or next clock tick
|
|
as determined by resolution in #Pt_Start().
|
|
*/
|
|
PMEXPORT void Pt_Sleep(int32_t duration);
|
|
|
|
/** @} */
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|