/**********************************************************************

  Audacity: A Digital Audio Editor

  ODTaskThread.cpp
  
  Created by Michael Chinen (mchinen) on 6/8/08
  Audacity(R) is copyright (c) 1999-2008 Audacity Team.
  License: GPL v2.  See License.txt.

******************************************************************//**

\class ODTaskThread
\brief A thread that executes a part of the task specfied by an ODTask.

*//*******************************************************************/


#include "ODTaskThread.h"
#include "ODTask.h"
#include "ODManager.h"


ODTaskThread::ODTaskThread(ODTask* task)
#ifndef __WXMAC__
: wxThread()
#endif
{
   mTask=task;
#ifdef __WXMAC__
   mDestroy = false; 
   mThread = NULL;
#endif
   
}   

#ifdef __WXMAC__
   
void ODTaskThread::Entry()
#else 
void *ODTaskThread::Entry()

#endif
{
   //TODO: Figure out why this has no effect at all.
   //wxThread::This()->SetPriority( 40);
   //Do at least 5 percent of the task
   mTask->DoSome(0.05f);
   
   //release the thread count so that the ODManager knows how many active threads are alive.
   ODManager::Instance()->DecrementCurrentThreads();
   
   
#ifndef __WXMAC__
   return NULL;
#endif
}

#ifdef __WXMAC__
ODCondition::ODCondition(ODLock *lock)
{
   condition = (pthread_cond_t *) malloc (sizeof (pthread_cond_t));
   pthread_cond_init(condition, NULL);
   m_lock=lock;
}
ODCondition::~ODCondition()
{
   pthread_cond_destroy (condition); 
   free(condition);
}

void ODCondition::Signal()
{
   pthread_cond_signal(condition);
}
   
void ODCondition::Broadcast()
{
   pthread_cond_broadcast(condition);
}
void ODCondition::Wait()
{
   pthread_cond_wait(condition,m_lock->mutex);
}
   
#endif

  