#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&);
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();});
CASPAR_LOG_CURRENT_EXCEPTION();
}
+ join();
+ }
+
+ void join()
+ {
thread_.join();
}
void run() // noexcept
{
- win32_exception::install_handler();
+ ensure_gpf_handler_installed_for_thread(u8(name_).c_str());
while(is_running_)
{
try
}
};
-}
\ No newline at end of file
+}