try to fix Windows freezing problem

svn: r14867
This commit is contained in:
Matthew Flatt 2009-05-19 12:54:07 +00:00
parent 67a8ebecdb
commit e51ca461ae
11 changed files with 14 additions and 4 deletions

View File

@ -180,6 +180,7 @@ static BOOL CALLBACK CheckWindow(HWND wnd, LPARAM param)
info->remove ? PM_REMOVE : PM_NOREMOVE)) {
info->wnd = wnd;
info->c_return = c;
scheme_notify_sleep_progress();
return FALSE;
}
}
@ -217,6 +218,7 @@ int FindReady(MrEdContext *c, MSG *msg, int remove, MrEdContext **c_return)
while (PeekMessage(&pmsg, NULL, 0x4000, 0xFFFF, PM_REMOVE)) {
wxTranslateMessage(&pmsg);
DispatchMessage(&pmsg);
scheme_notify_sleep_progress();
}
}

View File

@ -47,6 +47,7 @@ scheme_in_main_thread
scheme_cancel_sleep
scheme_start_sleeper_thread
scheme_end_sleeper_thread
scheme_notify_sleep_progress
scheme_make_thread_cell
scheme_thread_cell_get
scheme_thread_cell_set

View File

@ -47,6 +47,7 @@ scheme_in_main_thread
scheme_cancel_sleep
scheme_start_sleeper_thread
scheme_end_sleeper_thread
scheme_notify_sleep_progress
scheme_make_thread_cell
scheme_thread_cell_get
scheme_thread_cell_set

View File

@ -49,6 +49,7 @@ EXPORTS
scheme_cancel_sleep
scheme_start_sleeper_thread
scheme_end_sleeper_thread
scheme_notify_sleep_progress
scheme_make_thread_cell
scheme_thread_cell_get
scheme_thread_cell_set

View File

@ -49,6 +49,7 @@ EXPORTS
scheme_cancel_sleep
scheme_start_sleeper_thread
scheme_end_sleeper_thread
scheme_notify_sleep_progress
scheme_make_thread_cell
scheme_thread_cell_get
scheme_thread_cell_set

View File

@ -8061,14 +8061,14 @@ static void clean_up_wait(long result, OS_SEMAPHORE_TYPE *array,
static int made_progress;
static DWORD max_sleep_time;
void scheme_notify_sleep_progres()
void scheme_notify_sleep_progress()
{
made_progress = 1;
}
#else
void scheme_notify_sleep_progres()
void scheme_notify_sleep_progress()
{
}

View File

@ -125,6 +125,8 @@ MZ_EXTERN void scheme_cancel_sleep(void);
MZ_EXTERN void scheme_start_sleeper_thread(void (*mzsleep)(float seconds, void *fds), float secs, void *fds, int hit_fd);
MZ_EXTERN void scheme_end_sleeper_thread();
MZ_EXTERN void scheme_notify_sleep_progress();
MZ_EXTERN Scheme_Object *scheme_make_thread_cell(Scheme_Object *def_val, int inherited);
MZ_EXTERN Scheme_Object *scheme_thread_cell_get(Scheme_Object *cell, Scheme_Thread_Cell_Table *cells);
MZ_EXTERN void scheme_thread_cell_set(Scheme_Object *cell, Scheme_Thread_Cell_Table *cells, Scheme_Object *v);

View File

@ -99,6 +99,7 @@ int (*scheme_in_main_thread)(void);
void (*scheme_cancel_sleep)(void);
void (*scheme_start_sleeper_thread)(void (*mzsleep)(float seconds, void *fds), float secs, void *fds, int hit_fd);
void (*scheme_end_sleeper_thread)();
void (*scheme_notify_sleep_progress)();
Scheme_Object *(*scheme_make_thread_cell)(Scheme_Object *def_val, int inherited);
Scheme_Object *(*scheme_thread_cell_get)(Scheme_Object *cell, Scheme_Thread_Cell_Table *cells);
void (*scheme_thread_cell_set)(Scheme_Object *cell, Scheme_Thread_Cell_Table *cells, Scheme_Object *v);

View File

@ -55,6 +55,7 @@
scheme_extension_table->scheme_cancel_sleep = scheme_cancel_sleep;
scheme_extension_table->scheme_start_sleeper_thread = scheme_start_sleeper_thread;
scheme_extension_table->scheme_end_sleeper_thread = scheme_end_sleeper_thread;
scheme_extension_table->scheme_notify_sleep_progress = scheme_notify_sleep_progress;
scheme_extension_table->scheme_make_thread_cell = scheme_make_thread_cell;
scheme_extension_table->scheme_thread_cell_get = scheme_thread_cell_get;
scheme_extension_table->scheme_thread_cell_set = scheme_thread_cell_set;

View File

@ -55,6 +55,7 @@
#define scheme_cancel_sleep (scheme_extension_table->scheme_cancel_sleep)
#define scheme_start_sleeper_thread (scheme_extension_table->scheme_start_sleeper_thread)
#define scheme_end_sleeper_thread (scheme_extension_table->scheme_end_sleeper_thread)
#define scheme_notify_sleep_progress (scheme_extension_table->scheme_notify_sleep_progress)
#define scheme_make_thread_cell (scheme_extension_table->scheme_make_thread_cell)
#define scheme_thread_cell_get (scheme_extension_table->scheme_thread_cell_get)
#define scheme_thread_cell_set (scheme_extension_table->scheme_thread_cell_set)

View File

@ -118,7 +118,6 @@ extern void *scheme_gmp_tls_load(long *s);
extern void scheme_gmp_tls_unload(long *s, void *p);
extern void scheme_gmp_tls_snapshot(long *s, long *save);
extern void scheme_gmp_tls_restore_snapshot(long *s, void *data, long *save, int do_free);
extern void scheme_notify_sleep_progres();
static void check_ready_break();
@ -3493,7 +3492,7 @@ static int check_sleep(int need_activity, int sleep_now)
p2 = scheme_first_thread;
while (p2) {
if (p2->ran_some) {
scheme_notify_sleep_progres();
scheme_notify_sleep_progress();
p2->ran_some = 0;
}
p2 = p2->next;