⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 atmothread.cpp

📁 VLC Player Source Code
💻 CPP
字号:
/* * AtmoThread.cpp: Base thread class for all threads inside AtmoWin * * See the README.txt file for copyright information and how to reach the author(s). * * $Id: cdf22a5dd512620b0dd683cbca1846b1c8a70f55 $ */#include "AtmoThread.h"#if defined(_ATMO_VLC_PLUGIN_)CThread::CThread(vlc_object_t *pOwner){    int err;    m_pAtmoThread = (atmo_thread_t *)vlc_object_create( pOwner,                                                        sizeof(atmo_thread_t) );    if(m_pAtmoThread)    {        m_pAtmoThread->p_thread = this;        this->m_pOwner = pOwner;        vlc_object_attach( m_pAtmoThread, m_pOwner);        vlc_mutex_init( &m_TerminateLock );        err = vlc_cond_init( m_pAtmoThread, &m_TerminateCond );        if(err) {           msg_Err( m_pAtmoThread, "vlc_cond_init failed %d",err);        }    }}#elseCThread::CThread(void){  m_hThread = CreateThread(NULL, 0, CThread::ThreadProc ,                           this, CREATE_SUSPENDED, &m_dwThreadID);  m_hTerminateEvent = CreateEvent(NULL,ATMO_FALSE,ATMO_FALSE,NULL);}#endif#if defined(_ATMO_VLC_PLUGIN_)CThread::~CThread(void){  if(m_pAtmoThread)  {      vlc_mutex_destroy( &m_TerminateLock );      vlc_cond_destroy( &m_TerminateCond );      vlc_object_detach(m_pAtmoThread);      vlc_object_release(m_pAtmoThread);  }}#elseCThread::~CThread(void){  CloseHandle(m_hThread);	  CloseHandle(m_hTerminateEvent);}#endif#if defined(_ATMO_VLC_PLUGIN_)void *CThread::ThreadProc(vlc_object_t *obj){      atmo_thread_t *pAtmoThread = (atmo_thread_t *)obj;      CThread *pThread = (CThread *)pAtmoThread->p_thread;      if(pThread) {         // give feedback I'am running?         vlc_thread_ready( pThread->m_pAtmoThread );	     pThread->Execute();      }      return NULL;}#elseDWORD WINAPI CThread::ThreadProc(LPVOID lpParameter){	   CThread *aThread = (CThread *)lpParameter;	   if(aThread)	      return aThread->Execute();	   else		  return (DWORD)-1;}#endifDWORD CThread::Execute(void){  /*    to do implement! override!	while(!bTerminated) {	 ...	}  */	 return 0;}void CThread::Terminate(void){   // Set Termination Flag and EventObject!   // and wait for Termination   m_bTerminated = ATMO_TRUE;#if defined(_ATMO_VLC_PLUGIN_)   if(m_pAtmoThread)   {      vlc_mutex_lock( &m_TerminateLock );      vlc_cond_signal( &m_TerminateCond  );      vlc_mutex_unlock( &m_TerminateLock );      vlc_object_kill( m_pAtmoThread );      vlc_thread_join( m_pAtmoThread );   }#else   SetEvent(m_hTerminateEvent);   WaitForSingleObject(m_hThread,INFINITE);#endif}void CThread::Run(){   m_bTerminated = ATMO_FALSE;#if defined(_ATMO_VLC_PLUGIN_)   m_pAtmoThread->b_die = false;   if(vlc_thread_create( m_pAtmoThread,                         "Atmo-CThread-Class",                         CThread::ThreadProc,                         VLC_THREAD_PRIORITY_LOW,                         false ))   {      msg_Err( m_pOwner, "cannot launch one of the AtmoLight threads");   }#else   ResetEvent(m_hTerminateEvent);   ResumeThread(m_hThread);#endif}/*   does a sleep if the sleep was interrupted through   the thread kill event return false...*/ATMO_BOOL CThread::ThreadSleep(DWORD millisekunden){#if defined(_ATMO_VLC_PLUGIN_)     vlc_mutex_lock( &m_TerminateLock );     int value = vlc_cond_timedwait(&m_TerminateCond,                                    &m_TerminateLock,                                    mdate() + (mtime_t)(millisekunden * 1000));     vlc_mutex_unlock( &m_TerminateLock );     return (value != 0);#else     DWORD res = WaitForSingleObject(m_hTerminateEvent,millisekunden);	 return (res == WAIT_TIMEOUT);#endif}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -