|
Boost Users : |
Subject: Re: [Boost-users] help with thread::interrupt
From: Conoscenza Silente (abruzzoforteegentile_at_[hidden])
Date: 2010-06-13 17:19:35
Hi Rush
I thank you very much! It works and now boost::interrupt is more clear to
me.
Can I ask you and who might help me one more question if you have time?
I hope is an easy one.
In a scenario where my thread is very CPU consuming , in your opinion which
is the better
way to create an interruption point?
#1 using a call to boost::this_thread::interruption_point()
#2 or using boost::this_thread::sleep( boost::posix_time::milliseconds( 0 )
)
Initially I thought the probably #1 might be better since seems created just
to throw the boost::thread_interrupted without any extra overhead due to
call to OS time posix libraries.
I gave a thought and I think that it might be better to chose the second one
since giving sleep( 0 ) might help the
OS scheduler in switching to another thread blocked. I am running under
Linux but I think that also in Windows might be the same.
Do you think that this reasoning make sense ?
Beside my specific case is it more efficient to call
boost::this_thread::interruption_point()?
Kind Regards
AFG
On Sun, Jun 13, 2010 at 9:07 PM, Rush Manbert <rush_at_[hidden]> wrote:
>
> On Jun 13, 2010, at 11:43 AM, Conoscenza Silente wrote:
>
> Hi All
> I am playing with boost::thread and it is not clear how thread::interrupt
> actually works.
>
> If I understood clearly the thread will be interrupted the next time it
> enters one of the predefined *interruption points*<http://www.boost.org/doc/libs/1_43_0/doc/html/thread/thread_management.html#interruption_points>;
> since thread::join is one interruption point, after I call tr.interrupt() I
> am expected that the thread will throw a boost::thread_interrupted exception
> once I call tr.join() right? .
>
>
> I believe that if your thread had started a second thread and was waiting
> on thread::join() for the second level thread to finish, and if you called
> thread::interrupt on the first thread, then you would see the exception.
>
> i.e.
>
> void levelTwo (void)
> {
> while (true)
> {
> ;
> }
> }
>
> void levelOne (void)
> {
> try
> {
> boost::thread t2 (levelTwo);
> t2.join();
> }
> catch (const boost::thread_interrupted& ex )
> {
> std::cout << "levelOne was interrupted" << std::endl;
> }
> }
>
> int main( int argc, char** argv ){
>
> boost::thread t1( levelOne );
>
> boost::this_thread::sleep( boost::posix_time::seconds( 3 ) );
>
> std::cout << "calisl to INTER." << std::endl; std::cout.flush();
> t1.interrupt();
> }
>
> - Rush
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net