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:
parent
85a4c6d35d
commit
cac4cd9e81
|
@ -247,13 +247,13 @@ void uiQueueMain(void (*f)(void *data), void *data)
|
||||||
int (*f)(void *data);
|
int (*f)(void *data);
|
||||||
void *data;
|
void *data;
|
||||||
}
|
}
|
||||||
- (id)initWithCallback:(int (*)(void *))callback data:(void*)callbackData;
|
- (id)initWithCallback:(int (*)(void *))callback data:(void *)callbackData;
|
||||||
- (void)doTimer:(NSTimer *)timer;
|
- (void)doTimer:(NSTimer *)timer;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation uiprivTimerDelegate
|
@implementation uiprivTimerDelegate
|
||||||
|
|
||||||
- (id)initWithCallback:(int (*)(void *))callback data:(void*)callbackData
|
- (id)initWithCallback:(int (*)(void *))callback data:(void *)callbackData
|
||||||
{
|
{
|
||||||
self = [super init];
|
self = [super init];
|
||||||
if (self) {
|
if (self) {
|
||||||
|
@ -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
|
||||||
|
|
13
unix/main.c
13
unix/main.c
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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()");
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue