Cleaned up stylistic nits and common branch naming issues on the new uiTimer() code. Also switched the Windows code to use a simple struct instead of the class (and with a uipriv name).

This commit is contained in:
Pietro Gagliardi 2018-04-18 21:04:12 -04:00
parent 85a4c6d35d
commit cac4cd9e81
5 changed files with 26 additions and 36 deletions

View File

@ -265,7 +265,7 @@ void uiQueueMain(void (*f)(void *data), void *data)
- (void)doTimer:(NSTimer *)timer - (void)doTimer:(NSTimer *)timer
{ {
if (!self->f(self->data)) if (!(*(self->f))(self->data))
[timer invalidate]; [timer invalidate];
} }
@ -276,7 +276,7 @@ void uiTimer(int milliseconds, int (*f)(void *data), void *data)
uiprivTimerDelegate *delegate; uiprivTimerDelegate *delegate;
delegate = [[uiprivTimerDelegate alloc] initWithCallback:f data:data]; delegate = [[uiprivTimerDelegate alloc] initWithCallback:f data:data];
[NSTimer scheduledTimerWithTimeInterval:milliseconds / 1000.0 [NSTimer scheduledTimerWithTimeInterval:(milliseconds / 1000.0)
target:delegate target:delegate
selector:@selector(doTimer:) selector:@selector(doTimer:)
userInfo:nil userInfo:nil

View File

@ -112,24 +112,23 @@ struct timer {
void *data; void *data;
}; };
static gboolean dotimer(gpointer data) static gboolean doTimer(gpointer data)
{ {
struct timer *t = (struct timer *) data; struct timer *t = (struct timer *) data;
if((*(t->f))(t->data)) if (!(*(t->f))(t->data)) {
return TRUE; uiprivFree(t);
else {
uiFree(t);
return FALSE; return FALSE;
} }
return TRUE;
} }
void uiTimer(int milliseconds, int (*f)(void *data), void *data) void uiTimer(int milliseconds, int (*f)(void *data), void *data)
{ {
struct timer *t; struct timer *t;
t = uiNew(struct timer); t = uiprivNew(struct timer);
t->f = f; t->f = f;
t->data = data; t->data = data;
g_timeout_add(milliseconds, dotimer, t); g_timeout_add(milliseconds, doTimer, t);
} }

View File

@ -131,9 +131,11 @@ void uiQueueMain(void (*f)(void *data), void *data)
void uiTimer(int milliseconds, int (*f)(void *data), void *data) void uiTimer(int milliseconds, int (*f)(void *data), void *data)
{ {
UINT_PTR timer; uiprivTimer *timer;
timer = (UINT_PTR) new TimerHandler(f, data); timer = uiprivNew(uiprivTimer);
if (SetTimer(utilWindow, timer, milliseconds, NULL) == 0) timer->f = f;
logLastError(L"SetTimer()"); timer->data = data;
if (SetTimer(utilWindow, (UINT_PTR) timer, milliseconds, NULL) == 0)
logLastError(L"error calling SetTimer() in uiTimer()");
} }

View File

@ -95,20 +95,9 @@ extern const char *initUtilWindow(HICON hDefaultIcon, HCURSOR hDefaultCursor);
extern void uninitUtilWindow(void); extern void uninitUtilWindow(void);
// main.cpp // main.cpp
struct TimerHandler { typedef struct uiprivTimer;
public: struct uiprivTimer {
TimerHandler() : TimerHandler(NULL, NULL) {} void (*f)(void *);
TimerHandler(int(*f)(void *data), void *data)
{
this->f = f;
this->data = data;
}
int operator()()
{
return this->f(this->data);
}
private:
int(*f)(void *data);
void *data; void *data;
}; };
extern int registerMessageFilter(void); extern int registerMessageFilter(void);

View File

@ -18,7 +18,7 @@ static LRESULT CALLBACK utilWindowWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, L
{ {
void (*qf)(void *); void (*qf)(void *);
LRESULT lResult; LRESULT lResult;
TimerHandler *timer; uiprivTimer *timer;
if (handleParentMessages(hwnd, uMsg, wParam, lParam, &lResult) != FALSE) if (handleParentMessages(hwnd, uMsg, wParam, lParam, &lResult) != FALSE)
return lResult; return lResult;
@ -38,11 +38,11 @@ static LRESULT CALLBACK utilWindowWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, L
(*qf)((void *) lParam); (*qf)((void *) lParam);
return 0; return 0;
case WM_TIMER: case WM_TIMER:
timer = (TimerHandler *) wParam; timer = (uiprivTimer *) wParam;
if (!(*timer)()) { if (!(*(timer->f))(timer->data)) {
if (!KillTimer(utilWindow, (UINT_PTR) timer)) if (KillTimer(utilWindow, (UINT_PTR) timer) == 0)
logLastError(L"KillTimer()"); logLastError(L"error calling KillTimer() to end uiTimer() procedure");
delete timer; uiprivFree(timer);
} }
return 0; return 0;
} }