Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt中的多线程-疑问与问题_Qt_Qt4 - Fatal编程技术网

Qt中的多线程-疑问与问题

Qt中的多线程-疑问与问题,qt,qt4,Qt,Qt4,几乎搜索了几个小时后,我对多线程的概念变得更加困惑,我需要帮助理解和实现它。在搜索之后,我得到了以下实现 main.cpp 现在我的问题是 我只定义了一个函数run(),当线程初始化时,编译器如何确定它必须执行run()函数,以及当它有多个函数时它会做什么,我得到了这个问题,因为在main.cpp中我刚刚键入了abc.start();并且没有指定要执行什么 在mythread1.h和run函数中,我使用while(0首先:run方法应该受到保护 其次,你所说的“我只定义了一个函数run()”是什

几乎搜索了几个小时后,我对多线程的概念变得更加困惑,我需要帮助理解和实现它。在搜索之后,我得到了以下实现

main.cpp

现在我的问题是

  • 我只定义了一个函数run(),当线程初始化时,编译器如何确定它必须执行run()函数,以及当它有多个函数时它会做什么,我得到了这个问题,因为在main.cpp中我刚刚键入了abc.start();并且没有指定要执行什么

  • 在mythread1.h和run函数中,我使用while(0首先:run方法应该受到保护

    其次,你所说的“我只定义了一个函数run()”是什么意思。你定义了方法,而不是函数。
    abc.start()
    意味着mythread的abc实例将启动并使用它的入口点方法
    void run()
    。你不能用相同的签名声明多个方法。如果你想知道它如何调用你的
    run())
    而不是
    QThread::run()
    那么您需要阅读一些关于C语言中虚拟方法的内容++

    广告3:我们如何知道你的文件为什么没有复制?检查QFile提供给你的错误。更改你的代码如下:

    QFile f("pathtomytargetfile");
    if( ! f.copy("targetpath") )
    {
         qDebug() << f.errorString();
    }
    
    QFile f(“pathtomytargetfile”);
    如果(!f.copy(“targetpath”))
    {
    
    qDebug()我的回答可能会让你更加困惑,但我认为以下链接值得一读:

  • 是介绍
    QThread
    类的工程师的一篇文章。他为建议继承
    QThread
    而道歉
  • 这篇文章向您展示了应该如何做到这一点(严格地说——从
    QThread
    继承也会起作用,只是在设计方面没有这么好)
  • 您可以找到Qt提供的多线程技术的概述,以及一些帮助,以确定应该使用哪种技术解决特定问题

  • HTH

    abc.wait()
    -您要等到
    abc
    完成后才能继续。当然,它会干扰主线程!那么我如何使它同时运行?我应该删除该行吗?然后它将在后台运行而不会干扰主线程?我在某个地方读到,我必须放置该行,以便在退出主线程之前关闭线程应用程序?您能澄清一下吗,我是QT新手在
    a.exec()
    返回后,您可以
    abc.quit()
    abc.exit(0)
    -听起来你真的需要开始学习了。我可以为我剩下的问题找到解释吗?这里有一组很棒的教程,让你开始学习Qt线程:如果你还在学习Qt的基础知识,我会把它们全部讲解一遍。
    #ifndef MYTHREAD1_H
    #define MYTHREAD1_H
    #include <QtGui>
    #include <windows.h>
    
    class mythread : public QThread
    {
    public:
        void run();
    };
    
    void mythread::run()
    {
    
    }
    
    
    
    #endif // MYTHREAD_H
    
    QFile f("pathtomytargetfile");
    if( ! f.copy("targetpath") )
    {
         qDebug() << f.errorString();
    }