DttSP_EXP void DeleteKeyer () { StopKeyer(); // if (clock_fired) // { sem_destroy (&clock_fired); // clock_fired = NULL; // } // if (poll_fired) // { sem_destroy (&poll_fired); // poll_fired = NULL; // } // if (keyer_started) // { sem_destroy (&keyer_started); // keyer_started = NULL; //} delCWToneGen (gen); delKeyerState (ks); delKeyerLogic (kl); #ifndef INTERLEAVED ringb_float_free (lring); ringb_float_free (rring); #else ringb_float_free (lring); #endif if (cs_cw) { DeleteCriticalSection (cs_cw); cs_cw = NULL; } }
void closeup () { unsigned int thread; for(thread = 0; thread<3;thread++) { top[thread].running = FALSE; top[thread].susp = TRUE; Sleep (96); ringb_float_free (top[thread].jack.auxr.i.l); ringb_float_free (top[thread].jack.auxr.i.r); ringb_float_free (top[thread].jack.auxr.o.l); ringb_float_free (top[thread].jack.auxr.o.r); ringb_float_free (top[thread].jack.ring.o.r); ringb_float_free (top[thread].jack.ring.o.l); ringb_float_free (top[thread].jack.ring.i.r); ringb_float_free (top[thread].jack.ring.i.l); destroy_workspace (thread); } Sleep(100); //fprintf(stderr,"Done with destructor\n"),fflush(stderr); }