1

我正在 Qt 中申请作为我的学期项目。题目是“请教哲学家的问题”。现在我有一个问题,我真的不知道如何解决它。问题是:我有一个名为(philisophers)的对象数组,filozofowie它包含类filozof(philosopher)的对象。philospher 类派生自 Thread 类。当我试图在 for 循环中从数组启动线程时,它会启动其中的四个,然后发生错误。
这是错误:http: //i.imgur.com/D0i7T.png

这是代码:

菲洛佐夫.h

#ifndef FILOZOF_H
#define FILOZOF_H

#include <QtCore>
#include <QtGui>

class Filozof : public QThread
{
    public:
    Filozof();
    void run();
    QString name;
    QLabel *stan;
};

#endif

主类.h

#ifndef MAINCLASS_H
#define MAINCLASS_H

#include <QtGui>
#include <QtCore>
#include "ui_mainwindow.h"
#include "Filozof.h"

class MainClass : public QMainWindow
{
    Q_OBJECT

public:
    MainClass(QWidget *parent = 0, Qt::WFlags flags = 0);
    ~MainClass();
    Ui::MainClassClass ui;
    Filozof filozofowie[4];
    QSystemSemaphore *kelner;

public slots: 
    void startSimulation();
    void stopSimulation();
};

#endif // MAINCLASS_H

部分mainclass.cpp

void MainClass::startSimulation() 
{
    this->kelner = new QSystemSemaphore("kelner", 4, QSystemSemaphore::Create);
    ui.textEdit->append("[" + QDateTime::currentDateTime().toString() + "] Start      symulacji");
    for(int i = 0; i < 5; i++)
    {
        filozofowie[i].start();
        if(filozofowie[i].isRunning())
        {
           ui.textEdit->append("[" + QDateTime::currentDateTime().toString() + "] Watek filozofa " + QString::number(i) + " wystartowal");
        }else{
           ui.textEdit->append("[" + QDateTime::currentDateTime().toString() + "] Blad podczas tworzenia watku filozofa " + QString::number(i));
       }
   }

    ui.buttonStart->setEnabled(false);
    ui.buttonStop->setEnabled(true);
}

请不要介意附加的文字,这些是波兰语的消息。

4

1 回答 1

2

至少你在这里有问题:

Filozof filozofowie[4];

索引是 0..3,但在这里你有 0..4:

for(int i = 0; i < 5; i++)

另外,你的“if isRunning”有点好笑。您可能应该连接启动信号,或使用 waitForStarted 方法。

于 2012-12-01T23:46:16.133 回答