boost::this_thread::interruption_point() doesn't throw boost::thread_interrupted& exception

后端 未结 1 894
一个人的身影
一个人的身影 2020-12-21 07:53

I want to interrupt a thread using boost::thread interrupt(). I have the following code which doesn\'t throw boost::thread_interrupted& exception:

int my         


        
相关标签:
1条回答
  • 2020-12-21 08:37

    As the commenter noted, there's no way to rule out a simple race condition (depends a lot on your architecture and load on the CPU). The fact adding an explicit sleep "helps" underlines this.

    Are you running on a single-core system?

    Here's a simple selfcontained example in case you spot something you are doing differently. See this simple tester:

    #include <iostream> 
    #include <boost/thread.hpp>
    
    struct myClass { 
        int myFunction(int arg1, int arg2);
    };
    
    int myClass::myFunction (int arg1, int arg2)
    {
        int counter = 0;
        try
        {
            //some code here
            do {   
                boost::this_thread::interruption_point(); 
                //some other code here
                ++counter;
            } while (counter != 20000); 
        } catch (boost::thread_interrupted&) {
            std::cout << "interrupted" << std::endl;
        }
        return counter;
    }
    
    void treadf() {
        myClass x;
        std::cout << "Returned: " << x.myFunction(1,2) << "\n";
    }
    
    int main()
    {
        boost::thread t(treadf);
        //t.interrupt(); // UNCOMMENT THIS LINE
        t.join();
    }
    

    It prints

    Returned: 20000
    

    Or, if you uncomment the line with t.interrupt()

    interrupted
    Returned: 0
    

    On my i7 system. See it Live On Coliru

    0 讨论(0)
提交回复
热议问题