OSDN Git Service

* Support for Player-pThread
authorkoinec(Koine Yuusuke) <koinec@yahoo.co.jp>
Sun, 26 Jan 2014 06:29:14 +0000 (15:29 +0900)
committerkoinec(Koine Yuusuke) <koinec@yahoo.co.jp>
Sun, 26 Jan 2014 06:29:14 +0000 (15:29 +0900)
src/Makefile
src/main.c
src/play_event.c
src/playumidi.h

index 7aeec67..58d7fad 100644 (file)
@@ -2,10 +2,11 @@
 MAKE = make
 CC = gcc
 
-WITH_VERIFY    = yes
+WITH_VERIFY    = no
 
 FLAGS_DEBUG = -g
 CC_FLAGS = -Wall
+LD_FLAGS = -lpthread
 TARGET = playumidi
 HEADERS = playumidi.h
 OBJS = main.o smf.o midievent.o play_event.o
@@ -22,7 +23,7 @@ FLAGS_VERIFY =
 all: $(TARGET)
 
 $(TARGET): $(OBJS) $(VERIFY_OBJS)
-       gcc -o $(TARGET) $(CC_FLAGS) $(FLAGS_DEBUG) $(FLAGS_VERIFY) $(OBJS) $(VERIFY_OBJS)
+       gcc -o $(TARGET) $(LD_FLAGS) $(FLAGS_DEBUG) $(FLAGS_VERIFY) $(OBJS) $(VERIFY_OBJS)
 
 .if $(WITH_VERIFY) == "yes"
 verify_event.o: verify_event.c $(HEADERS)
index 68b193a..5b29871 100644 (file)
@@ -5,6 +5,7 @@
 #include<unistd.h>
 #include<string.h>
 #include<signal.h>
+#include<pthread.h>
 #include<sys/stat.h>
 #include<sys/types.h>
 #include<sys/uio.h>
@@ -31,6 +32,7 @@ int main(
        sig_t   t_sigerr;
        struct stat             t_status;
        Byte    *pb_filebuf;
+       pthread_t       t_thread;
 
        if( 2 != argc ) { return 0x01; }
 
@@ -66,15 +68,22 @@ int main(
        
        /* Read Midi File Header */
        ReadMidiFile( pb_filebuf );
+       free( pb_filebuf );
 
        t_sigerr        = signal( SIGINT, (void (*))Signal_Int );
        if( SIG_ERR == t_sigerr )       {
                puts("Error!!: Cannot Signal Setting");
                return 0x00;
        }
-       Play_Event();
 
-       free( pb_filebuf );
+       i_err   = pthread_create( &t_thread, NULL,
+                                               (void *)PlayEvent_Play, (void *)NULL );
+       if( 0x00 != i_err )     {
+               puts("Error!!: Cannot Create Player-Thread");
+               return 0x00;
+       }
+       pthread_join( t_thread, NULL );
+
 
        return 0x00;
 }
index 838ca67..1b51c3f 100644 (file)
@@ -39,7 +39,6 @@ int   PlayEvent_StopVoiceOut_MidiPort(
        int             i_cnt;
        int             i_len;
        int             i_channel;
-       int             i_note;
        size_t  sz_write;
        Byte    *pb_value;
        Byte    b_value[3];
@@ -119,8 +118,8 @@ int Play_MetaEvent(
 
 /* ===================================================================*/
 EXTERN_FUNC_PLAY_EVENT
-       int     Play_Event(
-                       void )          {
+       void    PlayEvent_Play(
+                       void *v_arg )           {
 
        MidiEventInfo   *p_mevent;
        Byte                    *pb_vardata;
@@ -132,7 +131,6 @@ EXTERN_FUNC_PLAY_EVENT
        int                             i_len;
        int                             i_cnt;
        size_t                  sz_write;
-       //DWord                 dw_max_events;
        DWord                   dw_wait;
        MidiInfo                t_midi;
 
@@ -155,7 +153,7 @@ EXTERN_FUNC_PLAY_EVENT
        i_umidi[0]      = open("/dev/umidi1.0", O_RDWR );
        if( 0 > i_umidi[0] )    {
                puts("Error!!");
-               return 0x00;
+               return;
        }
 
 
@@ -226,6 +224,6 @@ EXTERN_FUNC_PLAY_EVENT
 
        close( i_umidi[0] );
 
-       return 0x00;
+       return;
 }
 
index 1a93b08..464dad2 100644 (file)
@@ -150,7 +150,7 @@ EXTERN_FUNC_MIDIEVENT int
     #define EXTERN_FUNC_PLAY_EVENT 
 #endif
 EXTERN_FUNC_PLAY_EVENT void Play_RequestStop( void ); 
-EXTERN_FUNC_PLAY_EVENT int Play_Event( void );
+EXTERN_FUNC_PLAY_EVENT void PlayEvent_Play( void *v_arg );
 
 
 #ifdef VERIFY_EVENT