Minor changes to threading
- Renamed `cpp11_thread.cpp` to `thread.cpp` - Removed features that are only supported by Win32 threads (`thread_wait` with timeout and mutex with spinlock) - Fixed formatting in `thread.cpp`
This commit is contained in:
@@ -39,7 +39,7 @@ add_executable(86Box WIN32 MACOSX_BUNDLE 86box.c config.c log.c random.c timer.c
|
||||
device.c nvr.c nvr_at.c nvr_ps2.c ${APP_ICON_MACOSX})
|
||||
|
||||
if(CPPTHREADS)
|
||||
target_sources(86Box PRIVATE cpp11_thread.cpp)
|
||||
target_sources(86Box PRIVATE thread.cpp)
|
||||
endif()
|
||||
|
||||
if(APPLE)
|
||||
|
||||
@@ -165,7 +165,7 @@ typedef void event_t;
|
||||
typedef void mutex_t;
|
||||
|
||||
extern thread_t *thread_create(void (*thread_func)(void *param), void *param);
|
||||
extern int thread_wait(thread_t *arg, int timeout);
|
||||
extern int thread_wait(thread_t *arg);
|
||||
extern event_t *thread_create_event(void);
|
||||
extern void thread_set_event(event_t *arg);
|
||||
extern void thread_reset_event(event_t *arg);
|
||||
@@ -175,7 +175,6 @@ extern void thread_destroy_event(event_t *arg);
|
||||
#define MUTEX_DEFAULT_SPIN_COUNT 1024
|
||||
|
||||
extern mutex_t *thread_create_mutex(void);
|
||||
extern mutex_t *thread_create_mutex_with_spin_count(unsigned int spin_count);
|
||||
extern void thread_close_mutex(mutex_t *arg);
|
||||
extern int thread_wait_mutex(mutex_t *arg);
|
||||
extern int thread_release_mutex(mutex_t *mutex);
|
||||
|
||||
@@ -346,7 +346,7 @@ void fluidsynth_close(void* p)
|
||||
|
||||
data->on = 0;
|
||||
thread_set_event(data->event);
|
||||
thread_wait(data->thread_h, -1);
|
||||
thread_wait(data->thread_h);
|
||||
|
||||
if (data->synth) {
|
||||
f_delete_fluid_synth(data->synth);
|
||||
|
||||
@@ -240,7 +240,7 @@ void mt32_close(void* p)
|
||||
|
||||
mt32_on = 0;
|
||||
thread_set_event(event);
|
||||
thread_wait(thread_h, -1);
|
||||
thread_wait(thread_h);
|
||||
|
||||
event = NULL;
|
||||
start_event = NULL;
|
||||
|
||||
@@ -506,7 +506,7 @@ sound_cd_thread_end(void)
|
||||
|
||||
sound_log("Waiting for CD Audio thread to terminate...\n");
|
||||
thread_set_event(sound_cd_event);
|
||||
thread_wait(sound_cd_thread_h, -1);
|
||||
thread_wait(sound_cd_thread_h);
|
||||
sound_log("CD Audio thread terminated...\n");
|
||||
|
||||
if (sound_cd_event) {
|
||||
|
||||
@@ -17,22 +17,14 @@ thread_t *
|
||||
thread_create(void (*thread_rout)(void *param), void *param)
|
||||
{
|
||||
auto thread = new std::thread([thread_rout, param] {
|
||||
thread_rout(param);
|
||||
thread_rout(param);
|
||||
});
|
||||
return thread;
|
||||
}
|
||||
|
||||
mutex_t *
|
||||
thread_create_mutex_with_spin_count(unsigned int spin_count)
|
||||
{
|
||||
/* Setting spin count of a mutex is not possible with pthreads. */
|
||||
return thread_create_mutex();
|
||||
}
|
||||
|
||||
int
|
||||
thread_wait(thread_t *arg, int timeout)
|
||||
thread_wait(thread_t *arg)
|
||||
{
|
||||
(void) timeout;
|
||||
auto thread = reinterpret_cast<std::thread*>(arg);
|
||||
thread->join();
|
||||
return 0;
|
||||
@@ -49,7 +41,8 @@ int
|
||||
thread_wait_mutex(mutex_t *_mutex)
|
||||
{
|
||||
if (_mutex == nullptr)
|
||||
return(0);
|
||||
return 0;
|
||||
|
||||
auto mutex = reinterpret_cast<std::mutex*>(_mutex);
|
||||
mutex->lock();
|
||||
return 1;
|
||||
@@ -60,7 +53,8 @@ int
|
||||
thread_release_mutex(mutex_t *_mutex)
|
||||
{
|
||||
if (_mutex == nullptr)
|
||||
return(0);
|
||||
return 0;
|
||||
|
||||
auto mutex = reinterpret_cast<std::mutex*>(_mutex);
|
||||
mutex->unlock();
|
||||
return 1;
|
||||
@@ -53,9 +53,9 @@ thread_create(void (*thread_rout)(void *param), void *param)
|
||||
|
||||
|
||||
int
|
||||
thread_wait(thread_t *arg, int timeout)
|
||||
thread_wait(thread_t *arg)
|
||||
{
|
||||
return pthread_join(*(pthread_t*)(arg), NULL) != 0;
|
||||
return pthread_join(*(pthread_t*)(arg), NULL);
|
||||
}
|
||||
|
||||
|
||||
@@ -144,14 +144,6 @@ thread_create_mutex(void)
|
||||
}
|
||||
|
||||
|
||||
mutex_t *
|
||||
thread_create_mutex_with_spin_count(unsigned int spin_count)
|
||||
{
|
||||
/* Setting spin count of a mutex is not possible with pthreads. */
|
||||
return thread_create_mutex();
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
thread_wait_mutex(mutex_t *_mutex)
|
||||
{
|
||||
|
||||
@@ -3459,7 +3459,7 @@ void mach64_close(void *p)
|
||||
|
||||
mach64->thread_run = 0;
|
||||
thread_set_event(mach64->wake_fifo_thread);
|
||||
thread_wait(mach64->fifo_thread, -1);
|
||||
thread_wait(mach64->fifo_thread);
|
||||
thread_destroy_event(mach64->wake_fifo_thread);
|
||||
thread_destroy_event(mach64->fifo_not_full_event);
|
||||
|
||||
|
||||
@@ -5036,7 +5036,7 @@ mystique_close(void *p)
|
||||
|
||||
mystique->thread_run = 0;
|
||||
thread_set_event(mystique->wake_fifo_thread);
|
||||
thread_wait(mystique->fifo_thread, -1);
|
||||
thread_wait(mystique->fifo_thread);
|
||||
thread_destroy_event(mystique->wake_fifo_thread);
|
||||
thread_destroy_event(mystique->fifo_not_full_event);
|
||||
thread_close_mutex(mystique->dma.lock);
|
||||
|
||||
@@ -2624,7 +2624,7 @@ pgc_close(void *priv)
|
||||
pgc_log("PGC: waiting for thread to stop...\n");
|
||||
#endif
|
||||
// while (dev->stopped);
|
||||
thread_wait(dev->pgc_thread, -1);
|
||||
thread_wait(dev->pgc_thread);
|
||||
#ifdef ENABLE_PGC_LOG
|
||||
pgc_log("PGC: thread stopped, closing up.\n");
|
||||
#endif
|
||||
|
||||
@@ -4097,7 +4097,7 @@ static void s3_virge_close(void *p)
|
||||
|
||||
virge->render_thread_run = 0;
|
||||
thread_set_event(virge->wake_render_thread);
|
||||
thread_wait(virge->render_thread, -1);
|
||||
thread_wait(virge->render_thread);
|
||||
thread_destroy_event(virge->not_full_event);
|
||||
thread_destroy_event(virge->wake_main_thread);
|
||||
thread_destroy_event(virge->wake_render_thread);
|
||||
|
||||
@@ -1048,7 +1048,7 @@ void *voodoo_card_init()
|
||||
|
||||
voodoo->force_blit_count = 0;
|
||||
voodoo->can_blit = 0;
|
||||
voodoo->force_blit_mutex = thread_create_mutex_with_spin_count(MUTEX_DEFAULT_SPIN_COUNT);
|
||||
voodoo->force_blit_mutex = thread_create_mutex();
|
||||
|
||||
return voodoo;
|
||||
}
|
||||
@@ -1172,7 +1172,7 @@ void *voodoo_2d3d_card_init(int type)
|
||||
|
||||
voodoo->force_blit_count = 0;
|
||||
voodoo->can_blit = 0;
|
||||
voodoo->force_blit_mutex = thread_create_mutex_with_spin_count(MUTEX_DEFAULT_SPIN_COUNT);
|
||||
voodoo->force_blit_mutex = thread_create_mutex();
|
||||
|
||||
return voodoo;
|
||||
}
|
||||
@@ -1241,22 +1241,22 @@ void voodoo_card_close(voodoo_t *voodoo)
|
||||
|
||||
voodoo->fifo_thread_run = 0;
|
||||
thread_set_event(voodoo->wake_fifo_thread);
|
||||
thread_wait(voodoo->fifo_thread, -1);
|
||||
thread_wait(voodoo->fifo_thread);
|
||||
voodoo->render_thread_run[0] = 0;
|
||||
thread_set_event(voodoo->wake_render_thread[0]);
|
||||
thread_wait(voodoo->render_thread[0], -1);
|
||||
thread_wait(voodoo->render_thread[0]);
|
||||
if (voodoo->render_threads >= 2) {
|
||||
voodoo->render_thread_run[1] = 0;
|
||||
thread_set_event(voodoo->wake_render_thread[1]);
|
||||
thread_wait(voodoo->render_thread[1], -1);
|
||||
thread_wait(voodoo->render_thread[1]);
|
||||
}
|
||||
if (voodoo->render_threads == 4) {
|
||||
voodoo->render_thread_run[2] = 0;
|
||||
thread_set_event(voodoo->wake_render_thread[2]);
|
||||
thread_wait(voodoo->render_thread[2], -1);
|
||||
thread_wait(voodoo->render_thread[2]);
|
||||
voodoo->render_thread_run[3] = 0;
|
||||
thread_set_event(voodoo->wake_render_thread[3]);
|
||||
thread_wait(voodoo->render_thread[3], -1);
|
||||
thread_wait(voodoo->render_thread[3]);
|
||||
}
|
||||
thread_destroy_event(voodoo->fifo_not_full_event);
|
||||
thread_destroy_event(voodoo->wake_main_thread);
|
||||
|
||||
@@ -889,7 +889,7 @@ video_close(void)
|
||||
{
|
||||
thread_run = 0;
|
||||
thread_set_event(blit_data.wake_blit_thread);
|
||||
thread_wait(blit_data.blit_thread, -1);
|
||||
thread_wait(blit_data.blit_thread);
|
||||
thread_destroy_event(blit_data.buffer_not_in_use);
|
||||
thread_destroy_event(blit_data.blit_complete);
|
||||
thread_destroy_event(blit_data.wake_blit_thread);
|
||||
|
||||
@@ -374,7 +374,7 @@ MUNTOBJ := midi_mt32.o \
|
||||
endif
|
||||
|
||||
ifeq ($(CPPTHREADS), y)
|
||||
THREADOBJ := cpp11_thread.o
|
||||
THREADOBJ := thread.o
|
||||
else
|
||||
THREADOBJ := win_thread.o
|
||||
endif
|
||||
|
||||
@@ -947,7 +947,7 @@ void opengl_close(void)
|
||||
|
||||
SetEvent(sync_objects.closing);
|
||||
|
||||
thread_wait(thread, -1);
|
||||
thread_wait(thread);
|
||||
|
||||
thread_close_mutex(resize_info.mutex);
|
||||
thread_close_mutex(options.mutex);
|
||||
|
||||
@@ -45,14 +45,11 @@ thread_create(void (*func)(void *param), void *param)
|
||||
|
||||
|
||||
int
|
||||
thread_wait(thread_t *arg, int timeout)
|
||||
thread_wait(thread_t *arg)
|
||||
{
|
||||
if (arg == NULL) return(0);
|
||||
|
||||
if (timeout == -1)
|
||||
timeout = INFINITE;
|
||||
|
||||
if (WaitForSingleObject(arg, timeout)) return(1);
|
||||
if (WaitForSingleObject(arg, INFINITE)) return(1);
|
||||
|
||||
return(0);
|
||||
}
|
||||
@@ -133,17 +130,6 @@ thread_create_mutex(void)
|
||||
}
|
||||
|
||||
|
||||
mutex_t *
|
||||
thread_create_mutex_with_spin_count(unsigned int spin_count)
|
||||
{
|
||||
mutex_t *mutex = malloc(sizeof(CRITICAL_SECTION));
|
||||
|
||||
InitializeCriticalSectionAndSpinCount(mutex, spin_count);
|
||||
|
||||
return mutex;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
thread_wait_mutex(mutex_t *mutex)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user