2
0
Эх сурвалжийг харах

Fixed 64-bit support for brl.timer. Fixes #74
Changed win32 timer to use TimerQueueTimer.

woollybah 6 жил өмнө
parent
commit
725b438e15

+ 2 - 2
systemdefault.mod/system.h

@@ -9,9 +9,9 @@
 #include <brl.mod/keycodes.mod/keycodes.h>	//keycode enums
 
 typedef int (*BBAsyncOp)( int asyncInfo );
-typedef void (*BBSyncOp)( BBObject *syncInfo,int asyncRet );
+typedef void (*BBSyncOp)( BBObject *syncInfo,size_t asyncRet );
 
-void bbSystemPostSyncOp( BBSyncOp syncOp,BBObject *syncInfo,int asyncRet );
+void bbSystemPostSyncOp( BBSyncOp syncOp,BBObject *syncInfo,size_t asyncRet );
 void bbSystemStartAsyncOp( BBAsyncOp asyncOp,int asyncInfo,BBSyncOp syncOp,BBObject *syncInfo );
 
 #ifdef __cplusplus

+ 2 - 2
systemdefault.mod/system.linux.c

@@ -21,7 +21,7 @@ typedef struct AsyncOp{
 	struct AsyncOp *succ;
 	BBSyncOp syncOp;
 	BBObject *syncInfo;
-	int asyncRet;
+	size_t asyncRet;
 	BBAsyncOp asyncOp;
 	int asyncInfo;
 }AsyncOp;
@@ -349,7 +349,7 @@ void *asyncOpThread( void *t ){
 	return 0;
 }
 
-void bbSystemPostSyncOp( BBSyncOp syncOp,BBObject *syncInfo,int asyncRet ){
+void bbSystemPostSyncOp( BBSyncOp syncOp,BBObject *syncInfo,size_t asyncRet ){
 	AsyncOp *p=(AsyncOp*)malloc( sizeof( AsyncOp ) );
 	p->asyncOp=0;
 	p->asyncRet=asyncRet;

+ 2 - 2
systemdefault.mod/system.macos.m

@@ -61,7 +61,7 @@ static NSWindow *keyWin;
 typedef struct AsyncOp{
 	BBAsyncOp asyncOp;
 	int asyncInfo;
-	int asyncRet;
+	size_t asyncRet;
 	BBSyncOp syncOp;
 	BBObject *syncInfo;
 }AsyncOp;
@@ -611,7 +611,7 @@ int bbOpenURL( BBString *bburl ){
 	return res;
 }
 
-void bbSystemPostSyncOp( BBSyncOp syncOp,BBObject *syncInfo,int asyncRet ){
+void bbSystemPostSyncOp( BBSyncOp syncOp,BBObject *syncInfo,size_t asyncRet ){
 	AsyncOp *p=(AsyncOp*)malloc( sizeof(AsyncOp) );
 	NSEvent *event=appDefEvent( BB_RESERVEDEVENTSUBTYPE1,(NSInteger)p,0 );
 	p->asyncOp=0;

+ 2 - 2
systemdefault.mod/system.win32.c

@@ -5,7 +5,7 @@
 typedef struct AsyncOp{
 	BBSyncOp syncOp;
 	BBObject *syncInfo;
-	int asyncRet;
+	size_t asyncRet;
 	BBAsyncOp asyncOp;
 	int asyncInfo;
 }AsyncOp;
@@ -513,7 +513,7 @@ static DWORD WINAPI asyncOpThread( void *t ){
 	PostThreadMessage( mainThreadId,WM_BBRESERVED1,0,(LPARAM)p );
 }
 
-void bbSystemPostSyncOp( BBSyncOp syncOp,BBObject *syncInfo,int asyncRet ){
+void bbSystemPostSyncOp( BBSyncOp syncOp,BBObject *syncInfo,size_t asyncRet ){
 	AsyncOp *p=(AsyncOp*)malloc( sizeof( AsyncOp ) );
 	p->asyncOp=0;
 	p->asyncRet=asyncRet;

+ 3 - 3
timerdefault.mod/timer.linux.c

@@ -20,7 +20,7 @@ extern void bbDelay( int millis );
 
 extern void brl_timerdefault__TimerFired( BBObject *bbTimer );
 
-static void timerSyncOp( BBObject *user,int ret ){
+static void timerSyncOp( BBObject *user,size_t ret ){
 	BBTimer *timer=(BBTimer*)ret;
 
 	++timer->gets;	
@@ -49,10 +49,10 @@ static void *timerProc( void *data ){
 		bbDelay( time-bbMilliSecs() );
 
 		++timer->puts;
-		bbSystemPostSyncOp( timerSyncOp,&bbNullObject,(int)timer );
+		bbSystemPostSyncOp( timerSyncOp,&bbNullObject,(size_t)timer );
 	}
 
-	bbSystemPostSyncOp( timerSyncOp,&bbNullObject,(int)timer );
+	bbSystemPostSyncOp( timerSyncOp,&bbNullObject,(size_t)timer );
 }
 
 BBTimer *bbTimerStart( float hertz,BBObject *bbTimer ){

+ 10 - 9
timerdefault.mod/timer.win32.c

@@ -8,26 +8,27 @@
 #define MAX_TIMERS 16
 
 void brl_timerdefault__TimerFired( BBObject *bbTimer );
+PHANDLE brl_timerdefault_TDefaultTimer__GetHandle(BBObject *bbTimer);
 
-static int timers[MAX_TIMERS],n_timers;
+static PHANDLE timers[MAX_TIMERS];
+static int n_timers;
 
-static void timerSyncOp( BBObject *bbTimer,int timer ){
+static void timerSyncOp( BBObject *bbTimer,PHANDLE timer ){
 	int i;
 	for( i=0;i<n_timers && timer!=timers[i];++i ) {}
 	if( i<n_timers ) brl_timerdefault__TimerFired( bbTimer );
 }
 
-static void __stdcall timerProc( UINT timer,UINT msg,DWORD user,DWORD u1,DWORD u2 ){
-	bbSystemPostSyncOp( timerSyncOp,(BBObject*)user,timer );
+static void __stdcall timerProc( PVOID user, BOOLEAN t ){
+	bbSystemPostSyncOp( timerSyncOp,(BBObject*)user,(size_t)brl_timerdefault_TDefaultTimer__GetHandle((BBObject*)user) );
 }
 
 void * bbTimerStart( float hertz,BBObject *bbTimer ){
-	int timer;
+	PHANDLE timer;
 	
 	if( n_timers==MAX_TIMERS ) return 0;
 	
-	timer=(int)timeSetEvent( 1000.0/hertz,0,timerProc,(DWORD)bbTimer,TIME_PERIODIC );
-	if( !timer ) return 0;
+	if ( !CreateTimerQueueTimer(&timer, NULL, timerProc, (PVOID)bbTimer, 0, 1000.0/hertz, 0 ) ) return 0;
 	
 	BBRETAIN( bbTimer );
 	
@@ -38,12 +39,12 @@ void * bbTimerStart( float hertz,BBObject *bbTimer ){
 void bbTimerStop( void* t,BBObject *bbTimer ){
 	int i;
 	
-	int timer=(int)t;
+	PHANDLE timer=(PHANDLE)t;
 	for( i=0;i<n_timers && timer!=timers[i];++i ) {}
 	if( i==n_timers ) return;
 
 	timers[i]=timers[--n_timers];
-	timeKillEvent( timer );
+	DeleteTimerQueueTimer(NULL, timer, NULL);
 
 	BBRELEASE( bbTimer );
 }

+ 5 - 1
timerdefault.mod/timerdefault.bmx

@@ -81,7 +81,11 @@ Type TDefaultTimer Extends TTimer
 	'Field _cycle:TTimer	'no longer used...see history
 	Field _event:TEvent
 	Field _handle:Byte Ptr
-
+?win32
+	Function _GetHandle:Byte Ptr(timer:TDefaultTimer) { nomangle }
+		Return timer._handle
+	End Function
+?
 End Type
 
 Type TDefaultTimerFactory Extends TTimerFactory