static const char *rcsId="@(#) $Id: ACMM:Drama2/examples/monitor1.cpp,v 1.45+ 22-Feb-2016 14:09:53+11 tjf $";
static void *use_rcsId = (0 ? (void *)(&use_rcsId) : (void *) &rcsId);
#include <iostream>
using drama::thread::MonitorToParam::MonitorToParam;
std::string
Transform(
const std::string &in)
override;
};
std::string MyMonitor::Transform(const std::string &in)
{
return std::string("T_") + in;
}
{
try
{
MyMonitor myMonitor(task->
TaskPtr(), {
"PARAM1" ,
"PARAM2",
"PARAM3" });
try
{
ufaceHandler.MessageUser("About to run monitor");
myMonitor.Run(&testtask, &ufaceHandler);
}
{
throw e;
}
}
catch (...)
{
throw;
}
}
private:
std::future<void> _ufaceThreadFuture;
public:
Monitor() :
drama::Task(
"MONITOR1"),
param1(TaskPtr(), "T_PARAM1", 0),
param2(TaskPtr(), "T_PARAM2", ""),
param3(TaskPtr(), "T_PARAM3", 0.0) {
_ufaceThreadFuture = std::async(std::launch::async, MonitorThread, this);
}
void WaitThreadExit(unsigned seconds) {
if (_ufaceThreadFuture.wait_for(std::chrono::seconds(seconds)) !=
std::future_status::ready)
{
"UFACE Thread did not complete");
}
_ufaceThreadFuture.get();
}
~Monitor() {
}
};
int main()
{
try
{
Monitor task;
task.RunDrama();
task.WaitThreadExit(3);
}
{
}
catch (std::exception &e)
{
std::cerr << "std::exception thrown by task.RunDrama"
<< e.what()
<< std::endl;
exit(1);
}
return 0;
}