• 5580阅读
  • 5回复

[提问]主线程中开一个子线程,那么,子线程的finished信号,是谁发送的? [复制链接]

上一主题 下一主题
离线tthheedhz
 
只看楼主 倒序阅读 楼主  发表于: 2012-05-25
是主线程emit的,还是子线程emit的?

比较细节的一个问题
离线jdwx

只看该作者 1楼 发表于: 2012-05-25
子线程的finished信号,是谁发送的?
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线tthheedhz
只看该作者 2楼 发表于: 2012-05-25
引用第1楼jdwx于2012-05-25 11:34发表的  :
子线程的finished信号,是谁发送的?

怎么是你反问我呢?


离线dbzhang800

只看该作者 3楼 发表于: 2012-05-25
引用楼主tthheedhz于2012-05-25 10:49发表的 主线程中开一个子线程,那么,子线程的finished信号,是谁发送的? :
是主线程emit的,还是子线程emit的?
比较细节的一个问题。



Manual中这这句话应该能回答你的问题吧?

This signal is emitted when the thread has finished executing.

离线tthheedhz
只看该作者 4楼 发表于: 2012-05-25
引用第3楼dbzhang800于2012-05-25 14:32发表的  :
  

有可能是主线程获知子线程结束,然后发送一个finished()信号呢?

不过这个可能性不大。估计应该还是子线程发送的。

我正在设计一个例子,来证明是子线程发送的。
离线dbzhang800

只看该作者 5楼 发表于: 2012-05-26
引用第4楼tthheedhz于2012-05-25 15:42发表的  :
有可能是主线程获知子线程结束,然后发送一个finished()信号呢?
不过这个可能性不大。估计应该还是子线程发送的。
我正在设计一个例子,来证明是子线程发送的。


多线程是相当复杂的一个东西,通过一个两个例子是无法证实“肯定是什么”的,可以证明“可以是什么”

Qt Manual对此没有明确说明,因为在哪个线程发送是不定的。比如,在Windows下,线程函数大致如下:

void threadFunc()
{
emit started();
run();
emit finished();
}

如果正常执行的话,执行完run()函数,就会在该线程内发射finished信号。如果线程非正常结束了呢?次线程已经不存在了。那么在杀死该线程的线程内发射finished信号也是可以理解的。
快速回复
限100 字节
 
上一个 下一个