static const char *rcsId="@(#) $Id: ACMM:Drama2/examples/monitor2.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::MonitorByType::MonitorByType;
void ParamChanged(
const std::string &name,
long value)
override;
void ParamChanged(
const std::string &name,
const std::string & value)
override;
};
void MyMonitor::ParamChanged(const std::string &name, long value)
{
std::cerr << "*** MyMonitor:ParamChanged (int) \""
<< name
<< "\" to \""
<< value
<< "\""
<< std::endl;
}
void MyMonitor::ParamChanged(
const std::string &name,
const std::string & value)
{
std::cerr << "*** MyMonitor:ParamChanged (string) \""
<< name
<< "\" to \""
<< value
<< "\""
<< std::endl;
}
void MyMonitor::ParamChanged(
const std::string &name,
{
std::cerr << "*** MyMonitor:ParamChanged (complex) \""
<< name
<< "\""
<< std::endl;
value->List(std::cerr);
}
{
try
{
MyMonitor myMonitor(task->
TaskPtr(), {
"PARAM1" ,
"PARAM2",
"PARAM3",
"PARAM4" , "STRUCT_PARAM" });
try
{
ufaceHandler.MessageUser("About to run monitor");
myMonitor.Run(&testtask, &ufaceHandler);
}
{
throw e;
}
}
catch (...)
{
throw;
}
}
private:
std::future<void> _ufaceThreadFuture;
public:
Monitor() :
drama::Task(
"MONITOR2") {
_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;
}