aboutsummaryrefslogtreecommitdiff
path: root/portmidi/porttime/ptwinmm.c
diff options
context:
space:
mode:
authorMitja Felicijan <mitja.felicijan@gmail.com>2024-10-07 06:50:04 +0200
committerMitja Felicijan <mitja.felicijan@gmail.com>2024-10-07 06:50:04 +0200
commit988f5d2b5343850e19ad1512cefe6c53953aa02e (patch)
tree1ff29934294e73b2575488c06df91866ce251dbe /portmidi/porttime/ptwinmm.c
parent9b5839c58a2e1df8bddf6b98805998508ea417d5 (diff)
downloadttdaw-988f5d2b5343850e19ad1512cefe6c53953aa02e.tar.gz
Added bunch of examples
Diffstat (limited to 'portmidi/porttime/ptwinmm.c')
-rwxr-xr-xportmidi/porttime/ptwinmm.c70
1 files changed, 70 insertions, 0 deletions
diff --git a/portmidi/porttime/ptwinmm.c b/portmidi/porttime/ptwinmm.c
new file mode 100755
index 0000000..5204659
--- /dev/null
+++ b/portmidi/porttime/ptwinmm.c
@@ -0,0 +1,70 @@
1/* ptwinmm.c -- portable timer implementation for win32 */
2
3
4#include "porttime.h"
5#include "windows.h"
6#include "time.h"
7
8
9TIMECAPS caps;
10
11static long time_offset = 0;
12static int time_started_flag = FALSE;
13static long time_resolution;
14static MMRESULT timer_id;
15static PtCallback *time_callback;
16
17void CALLBACK winmm_time_callback(UINT uID, UINT uMsg, DWORD_PTR dwUser,
18 DWORD_PTR dw1, DWORD_PTR dw2)
19{
20 (*time_callback)(Pt_Time(), (void *) dwUser);
21}
22
23
24PMEXPORT PtError Pt_Start(int resolution, PtCallback *callback, void *userData)
25{
26 if (time_started_flag) return ptAlreadyStarted;
27 timeBeginPeriod(resolution);
28 time_resolution = resolution;
29 time_offset = timeGetTime();
30 time_started_flag = TRUE;
31 time_callback = callback;
32 if (callback) {
33 timer_id = timeSetEvent(resolution, 1, winmm_time_callback,
34 (DWORD_PTR) userData, TIME_PERIODIC | TIME_CALLBACK_FUNCTION);
35 if (!timer_id) return ptHostError;
36 }
37 return ptNoError;
38}
39
40
41PMEXPORT PtError Pt_Stop()
42{
43 if (!time_started_flag) return ptAlreadyStopped;
44 if (time_callback && timer_id) {
45 timeKillEvent(timer_id);
46 time_callback = NULL;
47 timer_id = 0;
48 }
49 time_started_flag = FALSE;
50 timeEndPeriod(time_resolution);
51 return ptNoError;
52}
53
54
55PMEXPORT int Pt_Started()
56{
57 return time_started_flag;
58}
59
60
61PMEXPORT PtTimestamp Pt_Time()
62{
63 return timeGetTime() - time_offset;
64}
65
66
67PMEXPORT void Pt_Sleep(int32_t duration)
68{
69 Sleep(duration);
70}