From: wittend99 Date: Tue, 11 Sep 2012 19:51:11 +0000 (+0000) Subject: no longer needed. X-Git-Url: http://git.whiteaudio.com/gitweb/?a=commitdiff_plain;h=46a469f035e5b3ba25459903ce0c6cbd38adf223;p=freetel-svn-tracking.git no longer needed. git-svn-id: https://svn.code.sf.net/p/freetel/code@674 01035d8c-6547-0410-b346-abe4f91aad63 --- diff --git a/fdmdv2/src/audiostream.h b/fdmdv2/src/audiostream.h deleted file mode 100644 index f3562de9..00000000 --- a/fdmdv2/src/audiostream.h +++ /dev/null @@ -1,46 +0,0 @@ -//============================================================ -// AudioStream.h -// -// -//============================================================ -#include -#include -#include -#include "portaudiocpp/PortAudioCpp.hxx" -#include -#include -#include "libsndfile/include/sndfile.h" -#include "extern/include/portaudio.h" -#include "extern/include/portaudiocpp/PortAudioCpp.hxx" - -#ifndef __AudioStream__ -#define __AudioStream__ - -const int NUM_SECONDS = 5; -const double SAMPLE_RATE = 44100.0; -const int FRAMES_PER_BUFFER = 64; -const int TABLE_SIZE = 200; - -class AudioStream -{ -public: -// AudioStream(int tableSize) : tableSize_(tableSize), leftPhase_(0), rightPhase_(0); - AudioStream(int tableSize); - ~AudioStream(); - - int generate(const void *inputBuffer, void *outputBuffer, unsigned long framesPerBuffer, const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags); - -private: - float *table_; - int tableSize_; - int leftPhase_; - int rightPhase_; - - void Open(); - -protected: - -private: -}; - -#endif // __AudioStream__ diff --git a/fdmdv2/src/fdmdv2DlgAudio.cpp b/fdmdv2/src/fdmdv2DlgAudio.cpp deleted file mode 100644 index 5e7f1236..00000000 --- a/fdmdv2/src/fdmdv2DlgAudio.cpp +++ /dev/null @@ -1,23 +0,0 @@ -#include "fdmdv2DlgAudio.h" - -fdmdv2DlgAudio::fdmdv2DlgAudio( wxWindow* parent ) -: -DlgAudio( parent ) -{ - -} - -void fdmdv2DlgAudio::OnApply( wxCommandEvent& event ) -{ -// TODO: Implement OnApply -} - -void fdmdv2DlgAudio::OnCancel( wxCommandEvent& event ) -{ -// TODO: Implement OnCancel -} - -void fdmdv2DlgAudio::OnOK( wxCommandEvent& event ) -{ -// TODO: Implement OnOK -} diff --git a/fdmdv2/src/fdmdv2DlgAudio.h b/fdmdv2/src/fdmdv2DlgAudio.h deleted file mode 100644 index 196d3f80..00000000 --- a/fdmdv2/src/fdmdv2DlgAudio.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef __fdmdv2DlgAudio__ -#define __fdmdv2DlgAudio__ - -/** -@file -Subclass of DlgAudio, which is generated by wxFormBuilder. -*/ - -#include "topFrame.h" - -//// end generated include - -/** Implementing DlgAudio */ -class fdmdv2DlgAudio : public DlgAudio -{ - protected: - // Handlers for DlgAudio events. - void OnApply( wxCommandEvent& event ); - void OnCancel( wxCommandEvent& event ); - void OnOK( wxCommandEvent& event ); - public: - /** Constructor */ - fdmdv2DlgAudio( wxWindow* parent ); - //// end generated class members - -}; - -#endif // __fdmdv2DlgAudio__ diff --git a/fdmdv2/src/fdmdv2TopFrame.cpp b/fdmdv2/src/fdmdv2TopFrame.cpp deleted file mode 100644 index 7b3ef077..00000000 --- a/fdmdv2/src/fdmdv2TopFrame.cpp +++ /dev/null @@ -1,193 +0,0 @@ -#include "fdmdv2TopFrame.h" - -fdmdv2TopFrame::fdmdv2TopFrame( wxWindow* parent ) -: -TopFrame( parent ) -{ - -} - -void fdmdv2TopFrame::topFrame_OnClose( wxCloseEvent& event ) -{ -// TODO: Implement topFrame_OnClose -} - -void fdmdv2TopFrame::topFrame_OnPaint( wxPaintEvent& event ) -{ -// TODO: Implement topFrame_OnPaint -} - -void fdmdv2TopFrame::topFrame_OnSize( wxSizeEvent& event ) -{ -// TODO: Implement topFrame_OnSize -} - -void fdmdv2TopFrame::topFrame_OnUpdateUI( wxUpdateUIEvent& event ) -{ -// TODO: Implement topFrame_OnUpdateUI -} - -void fdmdv2TopFrame::OnOpen( wxCommandEvent& event ) -{ -// TODO: Implement OnOpen -} - -void fdmdv2TopFrame::OnOpenUpdateUI( wxUpdateUIEvent& event ) -{ -// TODO: Implement OnOpenUpdateUI -} - -void fdmdv2TopFrame::OnSave( wxCommandEvent& event ) -{ -// TODO: Implement OnSave -} - -void fdmdv2TopFrame::OnSaveUpdateUI( wxUpdateUIEvent& event ) -{ -// TODO: Implement OnSaveUpdateUI -} - -void fdmdv2TopFrame::OnClose( wxCommandEvent& event ) -{ -// TODO: Implement OnClose -} - -void fdmdv2TopFrame::OnCloseUpdateUI( wxUpdateUIEvent& event ) -{ -// TODO: Implement OnCloseUpdateUI -} - -void fdmdv2TopFrame::OnExit( wxCommandEvent& event ) -{ -// TODO: Implement OnExit -} - -void fdmdv2TopFrame::OnCopy( wxCommandEvent& event ) -{ -// TODO: Implement OnCopy -} - -void fdmdv2TopFrame::OnCopyUpdateUI( wxUpdateUIEvent& event ) -{ -// TODO: Implement OnCopyUpdateUI -} - -void fdmdv2TopFrame::OnCut( wxCommandEvent& event ) -{ -// TODO: Implement OnCut -} - -void fdmdv2TopFrame::OnCutUpdateUI( wxUpdateUIEvent& event ) -{ -// TODO: Implement OnCutUpdateUI -} - -void fdmdv2TopFrame::OnPaste( wxCommandEvent& event ) -{ -// TODO: Implement OnPaste -} - -void fdmdv2TopFrame::OnPasteUpdateUI( wxUpdateUIEvent& event ) -{ -// TODO: Implement OnPasteUpdateUI -} - -void fdmdv2TopFrame::OnToolsAudio( wxCommandEvent& event ) -{ -// TODO: Implement OnToolsAudio -} - -void fdmdv2TopFrame::OnToolsAudioUI( wxUpdateUIEvent& event ) -{ -// TODO: Implement OnToolsAudioUI -} - -void fdmdv2TopFrame::OnToolsComCfg( wxCommandEvent& event ) -{ -// TODO: Implement OnToolsComCfg -} - -void fdmdv2TopFrame::OnToolsComCfgUI( wxUpdateUIEvent& event ) -{ -// TODO: Implement OnToolsComCfgUI -} - -void fdmdv2TopFrame::OnToolsOptions( wxCommandEvent& event ) -{ -// TODO: Implement OnToolsOptions -} - -void fdmdv2TopFrame::OnToolsOptionsUI( wxUpdateUIEvent& event ) -{ -// TODO: Implement OnToolsOptionsUI -} - -void fdmdv2TopFrame::OnHelpCheckUpdates( wxCommandEvent& event ) -{ -// TODO: Implement OnHelpCheckUpdates -} - -void fdmdv2TopFrame::OnHelpCheckUpdatesUI( wxUpdateUIEvent& event ) -{ -// TODO: Implement OnHelpCheckUpdatesUI -} - -void fdmdv2TopFrame::OnHelpAbout( wxCommandEvent& event ) -{ -// TODO: Implement OnHelpAbout -} - -void fdmdv2TopFrame::OnTogBtnRxID( wxCommandEvent& event ) -{ -// TODO: Implement OnTogBtnRxID -} - -void fdmdv2TopFrame::OnTogBtnTxID( wxCommandEvent& event ) -{ -// TODO: Implement OnTogBtnTxID -} - -void fdmdv2TopFrame::OnCmdSliderScroll( wxScrollEvent& event ) -{ -// TODO: Implement OnCmdSliderScroll -} - -void fdmdv2TopFrame::OnSliderScrollBottom( wxScrollEvent& event ) -{ -// TODO: Implement OnSliderScrollBottom -} - -void fdmdv2TopFrame::OnCmdSliderScrollChanged( wxScrollEvent& event ) -{ -// TODO: Implement OnCmdSliderScrollChanged -} - -void fdmdv2TopFrame::OnSliderScrollTop( wxScrollEvent& event ) -{ -// TODO: Implement OnSliderScrollTop -} - -void fdmdv2TopFrame::OnCheckSQClick( wxCommandEvent& event ) -{ -// TODO: Implement OnCheckSQClick -} - -void fdmdv2TopFrame::OnTogBtnSplitClick( wxCommandEvent& event ) -{ -// TODO: Implement OnTogBtnSplitClick -} - -void fdmdv2TopFrame::OnTogBtnAnalogClick( wxCommandEvent& event ) -{ -// TODO: Implement OnTogBtnAnalogClick -} - -void fdmdv2TopFrame::OnTogBtnALCClick( wxCommandEvent& event ) -{ -// TODO: Implement OnTogBtnALCClick -} - -void fdmdv2TopFrame::OnTogBtnTXClick( wxCommandEvent& event ) -{ -// TODO: Implement OnTogBtnTXClick -} diff --git a/fdmdv2/src/fdmdv2TopFrame.h b/fdmdv2/src/fdmdv2TopFrame.h deleted file mode 100644 index fca7fe69..00000000 --- a/fdmdv2/src/fdmdv2TopFrame.h +++ /dev/null @@ -1,62 +0,0 @@ -#ifndef __fdmdv2TopFrame__ -#define __fdmdv2TopFrame__ - -/** -@file -Subclass of TopFrame, which is generated by wxFormBuilder. -*/ - -#include "topFrame.h" - -//// end generated include - -/** Implementing TopFrame */ -class fdmdv2TopFrame : public TopFrame -{ - protected: - // Handlers for TopFrame events. - void topFrame_OnClose( wxCloseEvent& event ); - void topFrame_OnPaint( wxPaintEvent& event ); - void topFrame_OnSize( wxSizeEvent& event ); - void topFrame_OnUpdateUI( wxUpdateUIEvent& event ); - void OnOpen( wxCommandEvent& event ); - void OnOpenUpdateUI( wxUpdateUIEvent& event ); - void OnSave( wxCommandEvent& event ); - void OnSaveUpdateUI( wxUpdateUIEvent& event ); - void OnClose( wxCommandEvent& event ); - void OnCloseUpdateUI( wxUpdateUIEvent& event ); - void OnExit( wxCommandEvent& event ); - void OnCopy( wxCommandEvent& event ); - void OnCopyUpdateUI( wxUpdateUIEvent& event ); - void OnCut( wxCommandEvent& event ); - void OnCutUpdateUI( wxUpdateUIEvent& event ); - void OnPaste( wxCommandEvent& event ); - void OnPasteUpdateUI( wxUpdateUIEvent& event ); - void OnToolsAudio( wxCommandEvent& event ); - void OnToolsAudioUI( wxUpdateUIEvent& event ); - void OnToolsComCfg( wxCommandEvent& event ); - void OnToolsComCfgUI( wxUpdateUIEvent& event ); - void OnToolsOptions( wxCommandEvent& event ); - void OnToolsOptionsUI( wxUpdateUIEvent& event ); - void OnHelpCheckUpdates( wxCommandEvent& event ); - void OnHelpCheckUpdatesUI( wxUpdateUIEvent& event ); - void OnHelpAbout( wxCommandEvent& event ); - void OnTogBtnRxID( wxCommandEvent& event ); - void OnTogBtnTxID( wxCommandEvent& event ); - void OnCmdSliderScroll( wxScrollEvent& event ); - void OnSliderScrollBottom( wxScrollEvent& event ); - void OnCmdSliderScrollChanged( wxScrollEvent& event ); - void OnSliderScrollTop( wxScrollEvent& event ); - void OnCheckSQClick( wxCommandEvent& event ); - void OnTogBtnSplitClick( wxCommandEvent& event ); - void OnTogBtnAnalogClick( wxCommandEvent& event ); - void OnTogBtnALCClick( wxCommandEvent& event ); - void OnTogBtnTXClick( wxCommandEvent& event ); - public: - /** Constructor */ - fdmdv2TopFrame( wxWindow* parent ); - //// end generated class members - -}; - -#endif // __fdmdv2TopFrame__ diff --git a/fdmdv2/src/fdmdv2_thread_audio.h b/fdmdv2/src/fdmdv2_thread_audio.h deleted file mode 100644 index d96221f0..00000000 --- a/fdmdv2/src/fdmdv2_thread_audio.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef __THREAD_AUDIO__ -#define __THREAD_AUDIO__ -#include "wx/thread.h" // Base class: wxThread - -//namespace NSfdmdv2Audio -//{ - class Fdmdv2ThreadAudio : public wxThread - { - public: - Fdmdv2ThreadAudio(); - ~Fdmdv2ThreadAudio(); - public: - virtual void* Entry(); - virtual void OnDelete(); - virtual void OnExit(); - virtual void OnKill(); - virtual bool TestDestroy(); - }; -//} -#endif // __THREAD_AUDIO__ diff --git a/fdmdv2/src/files.txt b/fdmdv2/src/files.txt deleted file mode 100644 index 378a6fcc..00000000 --- a/fdmdv2/src/files.txt +++ /dev/null @@ -1,48 +0,0 @@ -audiostream.cpp : audiostream.h -dlg_about.cpp : dlg_about.h -dlg_audio.cpp : dlg_audio.h -dlg_comports.cpp : dlg_comports.h -dlg_options.cpp : dlg_options.h -fdmdv2DlgAudio.cpp : fdmdv2DlgAudio.h -fdmdv2TopFrame.cpp : fdmdv2TopFrame.h -fdmdv2_main.cpp : fdmdv2_main.h -fdmdv2_plot.cpp : fdmdv2_plot.h -fdmdv2_thread_audio.h -paclass.cpp : paclass.h -thread_audio.cpp : thread_audio.h -topFrame.cpp : topFrame.h - -#topFrame.py -#topFrame.xrc -#credits.txt -#FDMDV2.fbp - -audiostream.cpp -audiostream.h -credits.txt -dlg_about.cpp -dlg_about.h -dlg_audio.cpp -dlg_audio.h -dlg_comports.cpp -dlg_comports.h -dlg_options.cpp -dlg_options.h -FDMDV2.fbp -fdmdv2DlgAudio.cpp -fdmdv2DlgAudio.h -fdmdv2TopFrame.cpp -fdmdv2TopFrame.h -fdmdv2_main.cpp -fdmdv2_main.h -fdmdv2_plot.cpp -fdmdv2_plot.h -fdmdv2_thread_audio.h -paclass.cpp -paclass.h -thread_audio.cpp -thread_audio.h -topFrame.cpp -topFrame.h -topFrame.py -topFrame.xrc \ No newline at end of file diff --git a/fdmdv2/src/thread_audio.cpp b/fdmdv2/src/thread_audio.cpp deleted file mode 100644 index ff1795e0..00000000 --- a/fdmdv2/src/thread_audio.cpp +++ /dev/null @@ -1,83 +0,0 @@ -//========================================================================== -// Name: thread_audio.cpp -// -// Purpose: Implements a thread for processing an audio data stream. -// Created: May 11, 2012 -// Initial author: David Witten -// License: BSD License (other licenses may apply to other -// components of this project) -//========================================================================== -#include "thread_audio.h" - -// declare a new type of event, to be used by our MyThread class: -wxDECLARE_EVENT(wxEVT_COMMAND_AUDIOTHREAD_COMPLETED, wxThreadEvent); -wxDECLARE_EVENT(wxEVT_COMMAND_AUDIOTHREAD_UPDATE, wxThreadEvent); - -#include "stdio.h" -#include "extern/include/portaudio.h" - -/* This will be called asynchronously by the PortAudio engine. */ -static int audioCallback( void *inputBuffer, void *outputBuffer, unsigned long framesPerBuffer, PaTime outTime, void *userData ) -{ - float *out = (float *) outputBuffer; - float *in = (float *) inputBuffer; - float leftInput, rightInput; - unsigned int i; - - if( inputBuffer == NULL ) - { - return 0; - } - /* Read input buffer, process data, and fill output buffer. */ - for(i = 0; i < framesPerBuffer; i++) - { - leftInput = *in++; /* Get interleaved samples from input buffer. */ - rightInput = *in++; - *out++ = leftInput * rightInput; /* ring modulation */ - *out++ = 0.5f * (leftInput + rightInput); /* mixing */ - } - return 0; -} - -AudioThread::AudioThread() -{ -} - -AudioThread::~AudioThread() -{ -} - -void* AudioThread::Entry() -{ - return NULL; -} -void AudioThread::OnDelete() -{ -} -void AudioThread::OnExit() -{ -} -void AudioThread::OnKill() -{ -} - -// bool Fdmdv2ThreadAudio::TestDestroy() -// { -// } - -#ifdef PORTAUDIO_MAIN -/* Use a PortAudioStream to process audio data. */ -int main(void) -{ - PortAudioWrap *stream; - Pa_Initialize(); - //Pa_OpenDefaultStream(&stream, 2, 2, /* stereo input and output */ paFloat32, 44100.0, 64, 0, /* 64 frames per buffer, let PA determine numBuffers */audioCallback, NULL ); - Pa_OpenDefaultStream(&stream, 2, 2, paFloat32, 44100.0, 64, 0, audioCallback, NULL ); - Pa_StartStream( stream ); - Pa_Sleep( 10000 ); /* Sleep for 10 seconds while processing. */ - Pa_StopStream( stream ); - Pa_CloseStream( stream ); - Pa_Terminate(); - return 0; -} -#endif //PORTAUDIO_MAIN diff --git a/fdmdv2/src/thread_audio.h b/fdmdv2/src/thread_audio.h deleted file mode 100644 index 22069572..00000000 --- a/fdmdv2/src/thread_audio.h +++ /dev/null @@ -1,207 +0,0 @@ -//========================================================================== -// Name: thread_audio.h -// -// Purpose: Declares background thread classes to handle audio IO. -// Created: May 11, 2012 -// Initial author: David Witten -// License: BSD License (other licenses may apply to other -// components of this project) -//========================================================================== -#include -#include "fdmdv2_main.h" - -#ifndef __THREAD_AUDIO__ -#define __THREAD_AUDIO__ - -//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= -// Class AudioThread -//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-= -class AudioThread: public wxThread -{ - public: - AudioThread(MainFrame *handler) : wxThread(wxTHREAD_DETACHED){ m_pHandler = handler; } - ~AudioThread(); - void *Entry(); - void OnDelete(); - void OnExit(); - void OnKill(); - bool TestDestroy(); - - protected: - //ExitCode Entry(); - MainFrame *m_pHandler; -}; - - // declare a new type of event, to be used by our MyThread class: - wxDECLARE_EVENT(wxEVT_COMMAND_MYTHREAD_COMPLETED, wxThreadEvent); - wxDECLARE_EVENT(wxEVT_COMMAND_MYTHREAD_UPDATE, wxThreadEvent); - class MyFrame; - - class MyThread : public wxThread - { - public: - MyThread(MyFrame *handler) - : wxThread(wxTHREAD_DETACHED) - { m_pHandler = handler } - ~MyThread(); - - protected: - virtual ExitCode Entry(); - MyFrame *m_pHandler; - }; - - class MyFrame : public wxFrame - { - public: - ... - ~MyFrame() - { - // it's better to do any thread cleanup in the OnClose() - // event handler, rather than in the destructor. - // This is because the event loop for a top-level window is not - // active anymore when its destructor is called and if the thread - // sends events when ending, they won't be processed unless - // you ended the thread from OnClose. - // See @ref overview_windowdeletion for more info. - } - ... - void DoStartThread(); - void DoPauseThread(); - - // a resume routine would be nearly identic to DoPauseThread() - void DoResumeThread() { ... } - - void OnThreadUpdate(wxThreadEvent&); - void OnThreadCompletion(wxThreadEvent&); - void OnClose(wxCloseEvent&); - - protected: - MyThread *m_pThread; - wxCriticalSection m_pThreadCS; // protects the m_pThread pointer - - wxDECLARE_EVENT_TABLE(); - }; - - wxBEGIN_EVENT_TABLE(MyFrame, wxFrame) - EVT_CLOSE(MyFrame::OnClose) - EVT_MENU(Minimal_Start, MyFrame::DoStartThread) - EVT_COMMAND(wxID_ANY, wxEVT_COMMAND_MYTHREAD_UPDATE, MyFrame::OnThreadUpdate) - EVT_COMMAND(wxID_ANY, wxEVT_COMMAND_MYTHREAD_COMPLETED, MyFrame::OnThreadCompletion) - wxEND_EVENT_TABLE() - - wxDEFINE_EVENT(wxEVT_COMMAND_MYTHREAD_COMPLETED, wxThreadEvent) - wxDEFINE_EVENT(wxEVT_COMMAND_MYTHREAD_UPDATE, wxThreadEvent) - - void MyFrame::DoStartThread() - { - m_pThread = new MyThread(this); - - if ( m_pThread->Create() != wxTHREAD_NO_ERROR ) - { - wxLogError("Can't create the thread!"); - delete m_pThread; - m_pThread = NULL; - } - else - { - if (m_pThread->Run() != wxTHREAD_NO_ERROR ) - { - wxLogError("Can't create the thread!"); - delete m_pThread; - m_pThread = NULL; - } - - // after the call to wxThread::Run(), the m_pThread pointer is "unsafe": - // at any moment the thread may cease to exist (because it completes its work). - // To avoid dangling pointers OnThreadExit() will set m_pThread - // to NULL when the thread dies. - } - } - - wxThread::ExitCode MyThread::Entry() - { - while (!TestDestroy()) - { - // ... do a bit of work... - - wxQueueEvent(m_pHandler, new wxThreadEvent(wxEVT_COMMAND_MYTHREAD_UPDATE)); - } - - // signal the event handler that this thread is going to be destroyed - // NOTE: here we assume that using the m_pHandler pointer is safe, - // (in this case this is assured by the MyFrame destructor) - wxQueueEvent(m_pHandler, new wxThreadEvent(wxEVT_COMMAND_MYTHREAD_COMPLETED)); - - return (wxThread::ExitCode)0; // success - } - - MyThread::~MyThread() - { - wxCriticalSectionLocker enter(m_pHandler->m_pThreadCS); - - // the thread is being destroyed; make sure not to leave dangling pointers around - m_pHandler->m_pThread = NULL; - } - - void MyFrame::OnThreadCompletion(wxThreadEvent&) - { - wxMessageOutputDebug().Printf("MYFRAME: MyThread exited!\n"); - } - - void MyFrame::OnThreadUpdate(wxThreadEvent&) - { - wxMessageOutputDebug().Printf("MYFRAME: MyThread update...\n"); - } - - void MyFrame::DoPauseThread() - { - // anytime we access the m_pThread pointer we must ensure that it won't - // be modified in the meanwhile; since only a single thread may be - // inside a given critical section at a given time, the following code - // is safe: - wxCriticalSectionLocker enter(m_pThreadCS); - - if (m_pThread) // does the thread still exist? - { - // without a critical section, once reached this point it may happen - // that the OS scheduler gives control to the MyThread::Entry() function, - // which in turn may return (because it completes its work) making - // invalid the m_pThread pointer - - if (m_pThread->Pause() != wxTHREAD_NO_ERROR ) - wxLogError("Can't pause the thread!"); - } - } - - void MyFrame::OnClose(wxCloseEvent&) - { - { - wxCriticalSectionLocker enter(m_pThreadCS); - - if (m_pThread) // does the thread still exist? - { - wxMessageOutputDebug().Printf("MYFRAME: deleting thread"); - - if (m_pThread->Delete() != wxTHREAD_NO_ERROR ) - wxLogError("Can't delete the thread!"); - } - } // exit from the critical section to give the thread - // the possibility to enter its destructor - // (which is guarded with m_pThreadCS critical section!) - - while (1) - { - { // was the ~MyThread() function executed? - wxCriticalSectionLocker enter(m_pThreadCS); - if (!m_pThread) break; - } - - // wait for thread completion - wxThread::This()->Sleep(1); - } - - Destroy(); - } - - -#endif // __THREAD_AUDIO__