repositories
/
deb_libcec.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
cec: allow to override the TV vendor id via the initial configuration
[deb_libcec.git]
/
src
/
lib
/
platform
/
threads
/
threads.h
diff --git
a/src/lib/platform/threads/threads.h
b/src/lib/platform/threads/threads.h
index 74d683f273fa5056916d47300302f7f8f1f6da2c..f2de310a23749f7960ef3882008c61e317c5eeb9 100644
(file)
--- a/
src/lib/platform/threads/threads.h
+++ b/
src/lib/platform/threads/threads.h
@@
-2,7
+2,7
@@
/*
* This file is part of the libCEC(R) library.
*
/*
* This file is part of the libCEC(R) library.
*
- * libCEC(R) is Copyright (C) 2011 Pulse-Eight Limited. All rights reserved.
+ * libCEC(R) is Copyright (C) 2011
-2012
Pulse-Eight Limited. All rights reserved.
* libCEC(R) is an original work, containing original code.
*
* libCEC(R) is a trademark of Pulse-Eight Limited.
* libCEC(R) is an original work, containing original code.
*
* libCEC(R) is a trademark of Pulse-Eight Limited.
@@
-40,7
+40,8
@@
namespace PLATFORM
public:
CThread(void) :
m_bStop(false),
public:
CThread(void) :
m_bStop(false),
- m_bRunning(false) {}
+ m_bRunning(false),
+ m_bStopped(false) {}
virtual ~CThread(void)
{
virtual ~CThread(void)
{
@@
-53,51
+54,56
@@
namespace PLATFORM
if (thread)
{
if (thread)
{
- CLockObject lock(thread->m_threadMutex);
- thread->m_bRunning = true;
- lock.Unlock();
- thread->m_threadCondition.Broadcast();
+ {
+ CLockObject lock(thread->m_threadMutex);
+ thread->m_bRunning = true;
+ thread->m_bStopped = false;
+ thread->m_threadCondition.Broadcast();
+ }
retVal = thread->Process();
retVal = thread->Process();
- lock.Lock();
- thread->m_bRunning = false;
- lock.Unlock();
- thread->m_threadCondition.Broadcast();
+ {
+ CLockObject lock(thread->m_threadMutex);
+ thread->m_bRunning = false;
+ thread->m_bStopped = true;
+ thread->m_threadCondition.Broadcast();
+ }
}
return retVal;
}
}
return retVal;
}
-
inline
bool IsRunning(void)
+
virtual
bool IsRunning(void)
{
CLockObject lock(m_threadMutex);
return m_bRunning;
}
{
CLockObject lock(m_threadMutex);
return m_bRunning;
}
-
inline
bool IsStopped(void)
+
virtual
bool IsStopped(void)
{
CLockObject lock(m_threadMutex);
return m_bStop;
}
{
CLockObject lock(m_threadMutex);
return m_bStop;
}
-
inline
bool CreateThread(bool bWait = true)
+
virtual
bool CreateThread(bool bWait = true)
{
bool bReturn(false);
CLockObject lock(m_threadMutex);
if (!IsRunning())
{
{
bool bReturn(false);
CLockObject lock(m_threadMutex);
if (!IsRunning())
{
+ m_bStop = false;
if (ThreadsCreate(m_thread, CThread::ThreadHandler, ((void*)static_cast<CThread *>(this))))
{
if (bWait)
if (ThreadsCreate(m_thread, CThread::ThreadHandler, ((void*)static_cast<CThread *>(this))))
{
if (bWait)
- m_threadCondition.Wait(m_threadMutex);
+ m_threadCondition.Wait(m_threadMutex
, m_bRunning
);
bReturn = true;
}
}
return bReturn;
}
bReturn = true;
}
}
return bReturn;
}
-
inline
bool StopThread(bool bWaitForExit = true)
+
virtual
bool StopThread(bool bWaitForExit = true)
{
bool bReturn(true);
bool bRunning(false);
{
bool bReturn(true);
bool bRunning(false);
@@
-105,7
+111,6
@@
namespace PLATFORM
CLockObject lock(m_threadMutex);
bRunning = IsRunning();
m_bStop = true;
CLockObject lock(m_threadMutex);
bRunning = IsRunning();
m_bStop = true;
- m_threadCondition.Broadcast();
}
if (bRunning && bWaitForExit)
}
if (bRunning && bWaitForExit)
@@
-116,10
+121,10
@@
namespace PLATFORM
return true;
}
return true;
}
-
inline
bool Sleep(uint32_t iTimeout)
+
virtual
bool Sleep(uint32_t iTimeout)
{
CLockObject lock(m_threadMutex);
{
CLockObject lock(m_threadMutex);
- return m_bStop ? false : m_threadCondition.Wait(m_threadMutex, iTimeout);
+ return m_bStop ? false : m_threadCondition.Wait(m_threadMutex,
m_bStopped,
iTimeout);
}
virtual void *Process(void) = 0;
}
virtual void *Process(void) = 0;
@@
-128,10
+133,11
@@
namespace PLATFORM
void SetRunning(bool bSetTo);
private:
void SetRunning(bool bSetTo);
private:
- bool m_bStop;
- bool m_bRunning;
- CCondition m_threadCondition;
- CMutex m_threadMutex;
- thread_t m_thread;
+ bool m_bStop;
+ bool m_bRunning;
+ bool m_bStopped;
+ CCondition<bool &> m_threadCondition;
+ CMutex m_threadMutex;
+ thread_t m_thread;
};
};
};
};