Почему я не могу вызвать функцию запуска класса изнутри себя? - PullRequest
2 голосов
/ 14 декабря 2010

Я совершенно новичок в программировании с потоками, и, поскольку класс использует QThreads, мне интересно, почему я не могу вызвать функцию start QThread изнутри себя, и ее функция run начинает выполняться независимо от другихпоток (программа, кажется, падает, когда я делаю это).Вместо этого я должен вызывать функцию запуска, откуда бы объект не был объявлен.Почему это так?

Какой-то код:

class ClassWithThread : public QThread
{
public:
    ClassWithThread() {}
    someFunction() {start();}
    run()
    {
        //do some stuff here
    }
}

Именно этим и занимается мой класс.Когда я звоню someFunction, программа вылетает.Если я удалю оператор start из someFunction и вызову start из-за пределов программы, он будет работать нормально.

1 Ответ

2 голосов
/ 14 декабря 2010

QThread следует выводить, только если вы хотите расширить возможности потока, а не специализировать его для своей работы, подобной этой. Эта статья поможет вам понять использование QThread.

Таким образом, вы должны создать QThread и запустить его извне, а затем переместить к нему объект, который будет выполнять эту работу. Прочитайте этот пример: http://labs.qt.nokia.com/2006/12/04/threading-without-the-headache/

Надеюсь, это поможет избежать такого рода проблем

...