2016-01-02 03:02:34 -08:00
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
/* Copyright (c) FIRST 2016. All Rights Reserved. */
|
|
|
|
|
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
|
|
|
|
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
|
|
|
|
/* the project. */
|
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
|
|
2014-08-14 00:07:02 -07:00
|
|
|
#include "HAL/HAL.hpp"
|
|
|
|
|
#include <atomic>
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Create and launch a task.
|
2015-11-01 00:41:10 -07:00
|
|
|
*
|
2014-08-14 00:07:02 -07:00
|
|
|
* @param name The name of the task. "FRC_" will be prepended to the task name.
|
|
|
|
|
* @param function The address of the function to run as the new task.
|
|
|
|
|
* @param args A parameter pack of arguments to pass to the function.
|
|
|
|
|
*/
|
|
|
|
|
template <class Function, class... Args>
|
2015-06-30 15:01:20 -04:00
|
|
|
Task::Task(const std::string& name, Function&& function, Args&&... args) {
|
2014-08-14 00:07:02 -07:00
|
|
|
m_taskName = "FRC_";
|
|
|
|
|
m_taskName += name;
|
|
|
|
|
|
|
|
|
|
std::cout << "[HAL] Starting task " << m_taskName << "..." << std::endl;
|
|
|
|
|
|
2015-07-22 00:13:28 -07:00
|
|
|
m_thread = std::thread(std::forward<std::decay_t<Function>>(function),
|
|
|
|
|
std::forward<Args>(args)...);
|
2015-07-20 19:38:06 -04:00
|
|
|
//TODO: lvuser does not currently have permissions to set the priority.
|
|
|
|
|
//SetPriority(kDefaultPriority);
|
2014-08-14 00:07:02 -07:00
|
|
|
|
|
|
|
|
static std::atomic<int32_t> instances{0};
|
|
|
|
|
instances++;
|
|
|
|
|
HALReport(HALUsageReporting::kResourceType_Task, instances, 0, m_taskName.c_str());
|
|
|
|
|
}
|