Почему я не могу вызвать функцию запуска класса изнутри?

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

Некоторый код:

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

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


person wrongusername    schedule 14.12.2010    source источник
comment
что за функция пуск? статика или что? пожалуйста, опубликуйте больше кода.   -  person Arunmu    schedule 14.12.2010
comment
Получаете ли вы тот же результат после вызова Qthread::start() вместо просто start() ?   -  person Arunmu    schedule 14.12.2010
comment
@wrongusername Какие ошибки компилятора вы получаете. someFunction() и run() должны быть объявлены с их возвращаемыми типами.   -  person Vijay Mathew    schedule 14.12.2010
comment
@Vijay: В Q никогда не упоминаются какие-либо ошибки компиляции. OP упоминает только о проблеме сбоя / дампа ядра.   -  person Alok Save    schedule 14.12.2010
comment
Из этого псевдокода трудно понять, что на самом деле происходит. Предоставьте нам реальный пример, который можно скомпилировать и протестировать, включая небольшую функцию main(), которая фактически создает объект и вызывает функцию. Ошибка может быть очень сложной для обнаружения, поэтому важны все детали.   -  person Sergei Tachenov    schedule 14.12.2010
comment
Из какого потока вызывается функция someFunction()? а запуск вызова извне программы ‹-вне программы??   -  person Frank Osterfeld    schedule 14.12.2010


Ответы (1)


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

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

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

person Patrice Bernassola    schedule 14.12.2010