summaryrefslogtreecommitdiffstats
path: root/src/libs/engine/PostProcessor.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2006-07-12 06:34:30 +0000
committerDavid Robillard <d@drobilla.net>2006-07-12 06:34:30 +0000
commit7e013dc6986fa9d6dc8616d494d9de5d192c4c69 (patch)
tree89bc9d97375fafae33cf22f1020c788baa8d326c /src/libs/engine/PostProcessor.cpp
parent120757b8cb154266aae21472a49f0c00309a7dde (diff)
downloadingen-7e013dc6986fa9d6dc8616d494d9de5d192c4c69.tar.gz
ingen-7e013dc6986fa9d6dc8616d494d9de5d192c4c69.tar.bz2
ingen-7e013dc6986fa9d6dc8616d494d9de5d192c4c69.zip
Factored out Thread (and Slave, an explicitly signal-driven thread)
git-svn-id: http://svn.drobilla.net/lad/ingen@87 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/libs/engine/PostProcessor.cpp')
-rw-r--r--src/libs/engine/PostProcessor.cpp90
1 files changed, 12 insertions, 78 deletions
diff --git a/src/libs/engine/PostProcessor.cpp b/src/libs/engine/PostProcessor.cpp
index e339f757..8b68159e 100644
--- a/src/libs/engine/PostProcessor.cpp
+++ b/src/libs/engine/PostProcessor.cpp
@@ -29,94 +29,28 @@ using std::cerr; using std::cout; using std::endl;
namespace Om {
-bool PostProcessor::m_process_thread_exit_flag = false;
-
PostProcessor::PostProcessor(size_t queue_size)
-: m_events(queue_size),
- m_thread_exists(false),
- m_semaphore(0)
-{
-}
-
-
-PostProcessor::~PostProcessor()
-{
- stop();
-}
-
-
-/** Start the process thread.
- */
-void
-PostProcessor::start()
-{
- cout << "[PostProcessor] Starting." << endl;
-
- pthread_attr_t attr;
- pthread_attr_init(&attr);
- pthread_attr_setstacksize(&attr, 1500000);
-
- pthread_create(&m_process_thread, &attr, process_events, this);
- m_thread_exists = true;
-}
-
-
-/** Stop the process thread.
- */
-void
-PostProcessor::stop()
+: _events(queue_size)
{
- if (m_thread_exists) {
- m_process_thread_exit_flag = true;
- pthread_cancel(m_process_thread);
- pthread_join(m_process_thread, NULL);
- m_thread_exists = false;
- }
+ set_name("PostProcessor");
}
-/** Signal the PostProcessor to process all pending events.
+/** Post processing thread.
+ *
+ * Infinite loop that waits on the semaphore and processes every enqueued
+ * event (to be signalled at the end of every process cycle).
*/
void
-PostProcessor::signal()
+PostProcessor::_signalled()
{
- m_semaphore.post();
-}
-
-
-void*
-PostProcessor::process_events(void* osc_processer)
-{
- PostProcessor* me = (PostProcessor*)osc_processer;
- return me->m_process_events();
-}
-
-
-/** OSC message processing thread.
- */
-void*
-PostProcessor::m_process_events()
-{
- Event* ev = NULL;
-
- while (true) {
- m_semaphore.wait();
-
- if (m_process_thread_exit_flag)
- break;
-
- while (!m_events.is_empty()) {
- ev = m_events.pop();
- assert(ev != NULL);
- ev->post_process();
- om->maid()->push(ev);
- }
+ while ( ! _events.is_empty()) {
+ Event* const ev = _events.pop();
+ assert(ev);
+ ev->post_process();
+ om->maid()->push(ev);
}
-
- cout << "[PostProcessor] Exiting post processor thread." << endl;
-
- return NULL;
}
} // namespace Om