Improving writer manager

This commit is contained in:
2018-01-24 16:21:46 +01:00
parent 3f12acf9d0
commit c5140fef68
2 changed files with 45 additions and 4 deletions
+36 -2
View File
@@ -5,7 +5,7 @@
using namespace std;
WriterManager::WriterManager(map<string, DATA_TYPE>* parameters_type, uint64_t n_images):
parameters_type(parameters_type), n_images(n_images), running_flag(true), n_received_frames(0), n_written_frames(0)
parameters_type(parameters_type), n_images(n_images), running_flag(true), killed_flag(false), n_received_frames(0), n_written_frames(0)
{
#ifdef DEBUG_OUTPUT
cout << "[WriterManager::WriterManager] Writer manager for n_images " << n_images << endl;
@@ -21,12 +21,25 @@ void WriterManager::stop()
running_flag = false;
}
void WriterManager::kill()
{
#ifdef DEBUG_OUTPUT
cout << "[WriterManager::kills] Killing writer manager." << endl;
#endif
killed_flag = true;
stop();
}
string WriterManager::get_status()
{
if (running_flag) {
return "receiving";
} else if (n_received_frames > n_written_frames) {
return "writing";
} else if (!are_all_parameters_set()) {
return "waiting for parameters";
} else {
return "finished";
}
@@ -41,12 +54,14 @@ map<string, uint64_t> WriterManager::get_statistics()
return result;
}
map<string, boost::any>& WriterManager::get_parameters(){
map<string, boost::any> WriterManager::get_parameters(){
return parameters;
}
void WriterManager::set_parameters(map<string, boost::any>& new_parameters)
{
lock_guard<mutex> lock(parameters_mutex);
for (auto parameter : new_parameters) {
string parameter_name = parameter.first;
auto parameter_value = parameter.second;
@@ -69,6 +84,11 @@ bool WriterManager::is_running()
return running_flag.load();
}
bool WriterManager::is_killed()
{
return killed_flag.load();
}
void WriterManager::received_frame(size_t frame_index)
{
n_received_frames++;
@@ -77,4 +97,18 @@ void WriterManager::received_frame(size_t frame_index)
void WriterManager::written_frame(size_t frame_index)
{
n_written_frames++;
}
bool WriterManager::are_all_parameters_set() {
lock_guard<mutex> lock(parameters_mutex);
for (auto parameter : *parameters_type) {
auto parameter_name = parameter.first;
if (parameters.count(parameter_name) == 0) {
return false;
}
}
return true;
}