• 5477阅读
  • 4回复

【新手】这样使用多线程有安全问题吗? [复制链接]

上一主题 下一主题
离线米尔利安
 

只看楼主 倒序阅读 楼主  发表于: 2011-03-17
如题。我的代码里有一个很耗时的函数,假设为
bool func1(int i)

窗口为MainWindow类:
.h文件:
class MainWindow : public QMainWindow
{
...
public slots:
    void doit();

private:
...
    QThread *thread;
    Worker *work;
}

class Worker : public QObject
{
    Q_OBJECT
public:
    bool doWork(int i)
    {
        bool ret = func1(i);//给func1加了个壳
        return ret;
    };
}

.cpp文件
MainWindow::MainWindow()
{
...
    work = new Worker;
}

void MainWindow::doit()
{
     thread = new QThread();//开启线程
   work->moveToThread(thread);
     thread->start();

//开始调用函数
   int i=0;
     work->doWork(i);//由子线程执行耗时代码
}

我想问一下,这样使用多线程会有什么隐患?开启的线程能自动结束退出吗?
[ 此帖被米尔利安在2011-03-18 09:36重新编辑 ]
我们在天上的父,愿人都尊你的名为圣。
愿你的国降临。
愿你的旨意行在地上,如同行在天上。
离线sbtree
只看该作者 1楼 发表于: 2011-03-17
引用楼主米尔利安于2011-03-17 16:43发表的 【新手】这样使用多线程有安全问题吗? :
如题。我的代码里有一个很耗时的函数,假设为
bool func1(int i)
.......
void MainWindow::doit()
{
     thread = new QThread();//开启线程
   work->moveToThread(thread);
//开始调用函数
   int i=0;
     work->doWork(i);//由子线程执行耗时代码
}
.......

没看到线程启动的代码及其线程函数代码。
使用qt的线程对象一般要派生QThread类,并实现它的run函数,启动要调用start函数,线程可以通过run函数返回而自动终止,也可以通过terminate函数强行终止,强行终止后果自负。
windows 7 + VC++2008 + Qt4.5.2
离线wxj120bw

只看该作者 2楼 发表于: 2011-03-18
补充下楼上的  线程结束可以调用quit函数,quit函数是在线程的主事件退出后自动才结束
离线米尔利安

只看该作者 3楼 发表于: 2011-03-18
不好意思,补上了线程的start。。。
另外 具体执行代码是使用QObject对象来执行的。并没有继承QThread重新实现run函数。而且线程的run函数好像不能带参数吧……
我们在天上的父,愿人都尊你的名为圣。
愿你的国降临。
愿你的旨意行在地上,如同行在天上。
离线wxj120bw

只看该作者 4楼 发表于: 2011-03-18
“具体执行代码是使用QObject对象来执行的”指什么有QObject对象执行?
快速回复
限100 字节
 
上一个 下一个