相关疑难解决方法(0)

为什么 C++ 允许抛出任何东西?

我刚看到这个问题及其相关答案。考虑到我以前从未遇到过这种使用throws 的方式,我很惊讶地发现这甚至是可能的。

  • 允许(几乎)任何东西被抛出和捕获背后的逻辑是什么?
  • 是否使用了超出异常/错误信号的 throw-catch 语法?如果是这样,这是否被认为是不好的做法,还是有我从未意识到的“常见”用法?

c++ exception-handling

5
推荐指数
1
解决办法
522
查看次数

从主线程中的工作线程捕获异常

我没有找到以下问题的简明答案:我有一个生产者 - 消费者线程模型,其中主线程是消费者,而一些工作线程是生产者.生产者线程在应用程序执行期间运行它的线程循环,这是可能的因为它偶尔抛出异常.主线程是UI线程,它应该弹出异常消息,包括来自不同线程的异常消息.如何在主线程中捕获这些异常?

在Windows上使用C++ 0x的boost

WorkerThread.cpp

WorkerThread::WorkerThread(){

   m_thread = boost::thread(&WorkerThread::drawThread,this);

}

void WorkerThread::drawThread()
{

         while(true)
         {
             boost::unique_lock<boost::mutex> lock(m_mutex);
              try{

                ///some work is done here...

              }catch(std::exception &e){

               /// some exception is thrown
               /// notify main thread of the exception
              }

         }


 }
Run Code Online (Sandbox Code Playgroud)

需要注意的是,我无法使用try {} catch在主线程中包装WorkerThread,因为它是在某个时刻创建的,从那时起自行运行直到应用程序终止.

c++ multithreading boost

4
推荐指数
2
解决办法
1万
查看次数

标签 统计

c++ ×2

boost ×1

exception-handling ×1

multithreading ×1