By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
446,213 Members | 1,439 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 446,213 IT Pros & Developers. It's quick & easy.

Timer, threads, exceptions

P: n/a
Hi,

I want to write a benchmark that will measure performance of several
different algorithms for the same problem. There is a set time bound
though, the algorithm cannot run longer than n minutes.

Here is what the main program would do:

initializeVariables();
try
{
Timer.start(int n);
performAlgorithm_1();
Timer.stop();
cout << "Running time for algorithm_1 was " << Timer.runningTime();
}
catch (OutOfTimeException e)
{
cout << "Algorithm didin't finish in" << Timer.getN() << " minutes.";
}

The only way I see the timer to work and throw exception is to run it
as a thread in the background. If so, how do I stop the timer thread?
Any other ideas how to approach this problem?

Jakub

Jan 29 '06 #1
Share this Question
Share on Google+
5 Replies


P: n/a
Jakub Moskal wrote:
I want to write a benchmark that will measure performance of several
different algorithms for the same problem. There is a set time bound
though, the algorithm cannot run longer than n minutes.

Here is what the main program would do:

initializeVariables();
try
{
Timer.start(int n);
performAlgorithm_1();
Timer.stop();
cout << "Running time for algorithm_1 was " << Timer.runningTime();
}
catch (OutOfTimeException e)
{
cout << "Algorithm didin't finish in" << Timer.getN() << " minutes.";
}

The only way I see the timer to work and throw exception is to run it
as a thread in the background. If so, how do I stop the timer thread?
Any other ideas how to approach this problem?


None of that can be solved with C++. Threads are not part of the
language, they are platform-specific, and as such are OT here.

Try the newsgroup for your OS or 'comp.programming.threads'.

V
Jan 29 '06 #2

P: n/a

"Jakub Moskal" <ja**********@gmail.com> wrote in message
news:11********************@o13g2000cwo.googlegrou ps.com...
Hi,

I want to write a benchmark that will measure performance of several
different algorithms for the same problem. There is a set time bound
though, the algorithm cannot run longer than n minutes.

Here is what the main program would do:

initializeVariables();
try
{
Timer.start(int n);
performAlgorithm_1();
Timer.stop();
cout << "Running time for algorithm_1 was " << Timer.runningTime();
}
catch (OutOfTimeException e)
{
cout << "Algorithm didin't finish in" << Timer.getN() << " minutes.";
}

The only way I see the timer to work and throw exception is to run it
as a thread in the background. If so, how do I stop the timer thread?
Any other ideas how to approach this problem?

Jakub

I don' t think this will work the way you expect it to. I don't think the
exception can be caught by
your catch block since the exception would be thrown in a different thread.
Threads are not covered
by the C++ standard, so you might want to experiment to see if I'm right or
not.

There are a couple of ways to handle this problem:

1. Instrument the algorithm code to periodically check the time elapsed
since the start.
2. Instrument the algorithm code to check an "abort" flag which will be set
by a separate timer
thread.
3. Run the algorithm code in a separate thread and terminate the thread
after the max time has elapsed.
This might be platform specific, it would work for windows, but I'm not
familar with the threading
libraries on linux/unix.
4. Spawn off algorithms in their own processes, and monitor the process for
time. Kill the process when
the elapsed time is exceeded. This would be fairly easy to do on
Linux/Unix as a shell script, might
be a bit more involved with windows, either use Perl to monitor or
write a C++ program to do the
monitoring/killing.

dave


Jan 30 '06 #3

P: n/a
Dave,

thank you for your reply. That's what I was afriad of, but I haven't
even got to that point to experiment with it. So here are my questions:

how can I spawn the algorithm and kill it after some time from c++
level in linux?

Do you think that using signals could solve it? fork the timer and send
a signal to the main program that also run the algorithm and handle the
signal?

Thank you for your help anyway!
Jakub

Jan 30 '06 #4

P: n/a
Jakub Moskal wrote:
Dave,

thank you for your reply. That's what I was afriad of, but I haven't
even got to that point to experiment with it. So here are my questions:

how can I spawn the algorithm and kill it after some time from c++
level in linux?

Do you think that using signals could solve it? fork the timer and send
a signal to the main program that also run the algorithm and handle the
signal?

Thank you for your help anyway!
Jakub


Your best bet is comp.unix.programmer, but SIGALRM should do the trick.
Jan 30 '06 #5

P: n/a
Neo
"Jakub Moskal" <ja**********@gmail.com> wrote in
news:11********************@o13g2000cwo.googlegrou ps.com:
Hi,

I want to write a benchmark that will measure performance of several
different algorithms for the same problem. There is a set time bound
though, the algorithm cannot run longer than n minutes.

Here is what the main program would do:

initializeVariables();
try
{
Timer.start(int n);
performAlgorithm_1();
Timer.stop();
cout << "Running time for algorithm_1 was " << Timer.runningTime();
}
catch (OutOfTimeException e)
{
cout << "Algorithm didin't finish in" << Timer.getN() << "
minutes.";
}

The only way I see the timer to work and throw exception is to run it
as a thread in the background. If so, how do I stop the timer thread?
Any other ideas how to approach this problem?

Jakub


Hmm.. heres a simple idea.. for a timer class.

class timer{
int starttime;
int endtime;

public:
timer() { starttime=endtime=0;}
int start(){ starttime = tickssincemidnight();} //almost all
compilers have a variation of the above function int stop(){ stoptime
= tickssincemidnight();} int timeelapsed() {return
(endtime-starttime);}
}

You could add exceptions accordingly.

Nice day
Jan 31 '06 #6

This discussion thread is closed

Replies have been disabled for this discussion.