Timer, threads, exceptions

Discussion in 'C++' started by Jakub Moskal, Jan 29, 2006.

  1. Jakub Moskal

    Jakub Moskal Guest

    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
     
    Jakub Moskal, Jan 29, 2006
    #1
    1. Advertisements

  2. 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
     
    Victor Bazarov, Jan 29, 2006
    #2
    1. Advertisements


  3. 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
     
    Dave Townsend, Jan 30, 2006
    #3
  4. Jakub Moskal

    Jakub Moskal Guest

    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
     
    Jakub Moskal, Jan 30, 2006
    #4
  5. Jakub Moskal

    red floyd Guest

    Your best bet is comp.unix.programmer, but SIGALRM should do the trick.
     
    red floyd, Jan 30, 2006
    #5
  6. Jakub Moskal

    Neo Guest

    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
     
    Neo, Jan 31, 2006
    #6
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.