]> git.sesse.net Git - casparcg/blobdiff - common/executor.h
* Refactored so that frame_consumers are stored in a frame_consumer_registry instance...
[casparcg] / common / executor.h
index 369e902675cf35d6ca92a8d04cad5429d3d54126..d812c98e1f806b83164e389fc0eff419ab56daf4 100644 (file)
@@ -21,8 +21,8 @@
 
 #pragma once
 
+#include "os/general_protection_fault.h"
 #include "except.h"
-#include "enum_class.h"
 #include "log.h"
 #include "blocking_bounded_queue_adapter.h"
 #include "blocking_priority_queue.h"
 
 #include <boost/thread.hpp>
 #include <boost/optional.hpp>
-#include <boost/assign/list_of.hpp>
 
 #include <functional>
 #include <future>
 
 namespace caspar {
                
-struct task_priority_def
+enum class task_priority
 {
-       enum type
-       {
-               lowest_priority = 0,
-               lower_priority,
-               low_priority,
-               normal_priority,
-               high_priority,
-               higher_priority
-       };
+       lowest_priority = 0,
+       lower_priority,
+       low_priority,
+       normal_priority,
+       high_priority,
+       higher_priority
 };
-typedef enum_class<task_priority_def> task_priority;
 
-class executor /* final */
+class executor final
 {      
        executor(const executor&);
        executor& operator=(const executor&);
@@ -69,13 +64,14 @@ class executor /* final */
 public:                
        executor(const std::wstring& name)
                : name_(name)
-               , execution_queue_(512, boost::assign::list_of
-                               (task_priority::lowest_priority)
-                               (task_priority::lower_priority)
-                               (task_priority::low_priority)
-                               (task_priority::normal_priority)
-                               (task_priority::high_priority)
-                               (task_priority::higher_priority))
+               , execution_queue_(512, std::vector<task_priority> {
+                       task_priority::lowest_priority,
+                       task_priority::lower_priority,
+                       task_priority::low_priority,
+                       task_priority::normal_priority,
+                       task_priority::high_priority,
+                       task_priority::higher_priority 
+               })
        {
                is_running_ = true;
                thread_ = boost::thread([this]{run();});
@@ -95,6 +91,11 @@ public:
                        CASPAR_LOG_CURRENT_EXCEPTION();
                }
                
+               join();
+       }
+
+       void join()
+       {
                thread_.join();
        }
 
@@ -240,7 +241,7 @@ private:
 
        void run() // noexcept
        {
-               win32_exception::install_handler();             
+               ensure_gpf_handler_installed_for_thread(u8(name_).c_str());
                while(is_running_)
                {
                        try
@@ -257,4 +258,4 @@ private:
        }       
 };
 
-}
\ No newline at end of file
+}