Естественно QThread член класса. Я ж написал, хочу все в одном классе, чтобы все само работало.
А внешний юзер даже не знал ничего про потоки.
Как я понимаю, смысл того что пишут (и активно повторяют) в том что Scanner не должен ничего знать о том в какой QThread он выполняется. Завязывая его с QThread (через наследование или членом класса) мы теряем гибкость. Напр др экземпляр Scanner потребовался в главной нитке или хотим иметь что-то еще (кроме Scanner) в той же нитке, или двигать его туда-сюда. Это достигается легко, напр
C++ (Qt)
void MyClass::RunScanner( void )
{
if (!mThread)
mThread = new QThread(this);
mScanner = new Scanner(0);
mScanner->moveToThread(mThread);
..
}
Scanner всегда должен выполняться в отдельном потоке, в этом и смысл. Поэтому зачем пользователя этого класса заставлять каждый раз делать одно и тоже, если об этом может позаботиться сам класс?
Да, так 2 класса, но это не накладно. Можно все в одном, ну тогда наследоваться или делать один членом другого (особой разницы нет).
в том и дело, что разница есть. Если делать членом, то экземпляр класса не должен иметь родителя.
Хотелось бы чтобы он был. Но в общем-то это практически не важно. Поэтому пока сделал без родителя.
Естественно QThread член класса. Я ж написал, хочу все в одном классе, чтобы все само работало.
А внешний юзер даже не знал ничего про потоки.
Как я понимаю, смысл того что пишут (и активно повторяют) в том что Scanner не должен ничего знать о том в какой QThread он выполняется.
Так он и так не знает, его реализация не завязана на потоке. Просто его код выполняется в потоке созданном самим классом.
При желании его так же можно подвинуть в любой другой поток.