diff options
author | Josh Blum | 2012-09-11 01:27:19 -0700 |
---|---|---|
committer | Josh Blum | 2012-09-11 01:27:19 -0700 |
commit | 02f896e5a66575df4f16593584a7bc6892adf81c (patch) | |
tree | 80747cddeddfebfe4fa6f5db6af2625866b4ce63 /lib/block_task.cpp | |
parent | 053d2f5cdbb4027d65aa7cb8af851a9edeac1d0a (diff) | |
download | sandhi-02f896e5a66575df4f16593584a7bc6892adf81c.tar.gz sandhi-02f896e5a66575df4f16593584a7bc6892adf81c.tar.bz2 sandhi-02f896e5a66575df4f16593584a7bc6892adf81c.zip |
work on interruptible_thread
Diffstat (limited to 'lib/block_task.cpp')
-rw-r--r-- | lib/block_task.cpp | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/lib/block_task.cpp b/lib/block_task.cpp index 3843b28..33ffbc1 100644 --- a/lib/block_task.cpp +++ b/lib/block_task.cpp @@ -36,6 +36,8 @@ void ElementImpl::mark_done(const tsbe::TaskInterface &task_iface) this->output_queues.pop(i); } + this->interruptible_thread.reset(); + //mark down the new state this->block_state = BLOCK_STATE_DONE; @@ -84,7 +86,7 @@ void ElementImpl::handle_task(const tsbe::TaskInterface &task_iface) const size_t num_inputs = task_iface.get_num_inputs(); const size_t num_outputs = task_iface.get_num_outputs(); - //const bool is_source = (num_inputs == 0); + const bool is_source = (num_inputs == 0); //const bool is_sink = (num_outputs == 0); this->work_io_ptr_mask = 0; //reset @@ -180,7 +182,19 @@ void ElementImpl::handle_task(const tsbe::TaskInterface &task_iface) if (this->enable_fixed_rate) work_noutput_items = std::min( work_noutput_items, myulround((num_input_items)*this->relative_rate)); this->work_task_iface = task_iface; - const int ret = block_ptr->Work(this->input_items, this->output_items); + int ret = 0; + if (is_source) + { + this->interruptible_thread->block = block_ptr; + this->interruptible_thread->ret = &ret; + this->interruptible_thread->input_items = &this->input_items; + this->interruptible_thread->output_items = &this->output_items; + this->interruptible_thread->call(); + } + else + { + ret = block_ptr->Work(this->input_items, this->output_items); + } this->work_task_iface.reset(); const size_t noutput_items = size_t(ret); |