getme example: wait time

This commit is contained in:
Michael Davidsaver
2017-06-20 11:09:19 +02:00
parent 163ab8fbd8
commit c53787f9bd

View File

@@ -9,7 +9,6 @@
#define USE_SIGNAL
#endif
#include <epicsExit.h>
#include <epicsEvent.h>
//! [Headers]
@@ -34,11 +33,6 @@ void alldone(int num)
}
#endif
void onthewayout(void* arg) {
(void)arg;
std::cout<<"Done\n";
}
struct ChanReq : public pva::ChannelRequester
{
virtual ~ChanReq() {}
@@ -123,6 +117,7 @@ struct GetReq : public pva::ChannelGetRequester
int main(int argc, char *argv[]) {
try {
double waitTime = -1.0;
std::string providerName("pva");
typedef std::vector<std::string> pvs_t;
pvs_t pvs;
@@ -131,11 +126,18 @@ int main(int argc, char *argv[]) {
if(argv[i][0]=='-') {
if(strcmp(argv[i], "-P")==0 || strcmp(argv[i], "--provider")==0) {
if(i<argc-1) {
providerName = argv[i+1];
providerName = argv[++i];
} else {
std::cerr << "--provider requires value\n";
return 1;
}
} else if(strcmp(argv[i], "-T")==0 || strcmp(argv[i], "--timeout")==0) {
if(i<argc-1) {
waitTime = pvd::castUnsafe<double, std::string>(argv[++i]);
} else {
std::cerr << "--timeout requires value\n";
return 1;
}
} else {
std::cerr<<"Unknown argument: "<<argv[i]<<"\n";
}
@@ -146,8 +148,6 @@ int main(int argc, char *argv[]) {
}
epicsAtExit(&onthewayout, 0);
#ifdef USE_SIGNAL
signal(SIGINT, alldone);
signal(SIGTERM, alldone);
@@ -198,11 +198,14 @@ int main(int argc, char *argv[]) {
// drop our explicit Channel reference, ChannelGet holds an additional reference
}
done.wait();
if(waitTime<0.0)
done.wait();
else
done.wait(waitTime);
return 0;
} catch(std::exception& e){
std::cerr<<"Error: "<<e.what()<<"\n";
return 1;
}
return 0;
}