
Beman Dawes wrote:
Jeff Garland wrote:
Beman Dawes wrote:
2) get_process_times compile fails on Linux -- fairly obvious issue here...I'm guessing you are testing on Windows :-)
Fixed. Vault .zip updated.
Yes, I was testing mostly on Windows. I tested on a Mac, and then forgot to retest after making some changes. It is working now on my Mac, but I don't have a running Linux system to test on.
I've posted a couple other changes in a new thread.
3) I see some major overlap in your plans with Boost.Process. You are providing what amounts to a a simplified form of what I what
...snip details...
The interface for my example is one line of code:
boost::system::cpu_time_reporter tr;
So while it might be implemented using Julio's process design, cpu_time_reporter provides a completely packaged solution. Unless I missed something (always possible!), I don't see process as providing the same thing.
No it doesn't. Are you saying the process_exec isn't going to be part of the system api? That's the part the overlaps..
4) Eating exceptions:
I don't like this code. I've been burned a few times by code that does eats exceptions....
Throwing exceptions from destructors is usually considered a no-no. Note that it is possible to use explicit calls to stop() etc., and detect that an error occurred.
I guess someone could make a case that exceptions should be thrown except in the destructor. I'll have to think about that.
Well, you're assuming that report will be called in a destructor. If it isn't and some sort of exception is thrown then the application can't handle it because you've eaten it. You could always have 2 versions: void cpu_time_reporter::report_no_exceptions() throws() void cpu_time_reporter::report()
My plan is to submit the CPU timer stuff as part of a Boost.System library, which packages small operating system dependent components together for convenience. For the moment, I mostly see things that overlap other current library efforts -- error codes excepted. That said, I really applaud the effort. In my view, Boost has being a piecemeal design OS api portability -- as an example, we have 3 libraries that retrieve clock time values from the system clock (thread, date-time, timer).
timer should be retired. threads should use date-time facilities. If cpu_timer is better implemented by calling date-time or process, that is OK with me, but I really like the simple cpu_timer and cpu_time_reporter interfaces. A user should not have to master a complex library just to write what amounts to one line of code.
I guess I should have made it clear that I like the cpu timer interface -- it's certainly valuable. And I totally agree that we want simple things to be simple. I'm mostly commenting on the broader purpose of System and what should be contained in it. See below for more...
Well, the error encapsulation really doesn't fit in any other single library, so at that point the camel's nose is under the tent and so we might as well acknowledge "system" as a small library and see what else fits into it, I think.
Yep. Again my thought is that it would be the collector for an OS portability layer. So you might have something like: system/time.hpp system/process.hpp system/thread.hpp system/file.hpp system/posix_impl/time.hpp system/win32_impl/time.hpp .... Of course, that make cpu timer somewhat questionable as an element of the system library -- it would need to be an add-on.
By returning a microseconds from functions like wall() the user can use the date-time streaming operators directly including the output formatting strings associated with time duration. I believe this would also eliminate the the double-based precision issues in the I/O code.
That sounds like an improved way to implement cpu_time_reporter, and offers other user benefits too, I would guess.
I think so.
One problem I see is that date-time doesn't have an easy way to do set-precision on i/o...something it probably needs.
My guess is that control over precision is something users really will want.
It hasn't come up yet, but I've been expecting it to.... Jeff