当前位置: 代码迷 >> QT开发 >> 貌似Qt 里面线程类中的run()函数里面不能抛出错误
  详细解决方案

貌似Qt 里面线程类中的run()函数里面不能抛出错误

热度:139   发布时间:2016-04-25 03:03:01.0
貌似Qt 里面线程类中的run()函数里面不能抛出异常啊
我想让线程停止的时候抛出异常在状态栏(先不管这样做是否必要),来显示进程停止,结果发现错误。


------解决思路----------------------
C++多线程里异常的处理非常困难

引用:
我想让线程停止的时候抛出异常在状态栏(先不管这样做是否必要),来显示进程停止,结果发现错误。

不是是否必要的问题,这是明显错误的做法

下面的讨论仅限于C++11——较早的C++版本不可行

像你这样跨线程的异常处理,需要将异常在线程之间相互传递。遇到异常时,将异常保存起来,之后再用rethrow将异常抛出

C++11中有std::current_exception()可以获取异常,生成一个std::exception_ptr保存起来,在另一个线程中用std::rethrow_exception()抛出异常

这里是示例 https://binglongx.wordpress.com/2010/01/03/handling-c-exceptions-thrown-from-worker-thread-in-the-main-thread/

偷懒的做法,可以用boost::exception
http://www.boost.org/doc/libs/1_57_0/libs/exception/doc/tutorial_exception_ptr.html
------解决思路----------------------
引用:
Quote: 引用:

我想让线程停止的时候抛出异常在状态栏(先不管这样做是否必要),来显示进程停止,结果发现错误。

不是是否必要的问题,这是明显错误的做法

不好意思 我眼花了 没看清 

不过,抛异常不是个好办法,去join线程不好么
------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

我想让线程停止的时候抛出异常在状态栏(先不管这样做是否必要),来显示进程停止,结果发现错误。

不是是否必要的问题,这是明显错误的做法

不好意思 我眼花了 没看清 

我想说的是,这个也算不上错
  相关解决方案