Это распространенная идиома. Вы хотите запустить поток, но хотите, чтобы этот поток работал с определенным объектом. Поэтому вам нужно передать потоку указатель на объект, с которым вы хотите, чтобы он работал. Если вы находитесь в функции-члене для этого объекта, указатель this
указывает на объект, с которым вы работаете. Вы не можете передать указатель на функцию-член напрямую (потому что тип будет другим), поэтому вы используете статическую функцию-член, единственная цель которой - привести указатель this
обратно к правильному типу и запустить нестатический функция-член.
Если вы измените this
на NULL
, поток не будет знать, с каким объектом он должен работать. Скорее всего, QThreadPrivate::start
выйдет из строя или потерпит неудачу, поскольку он не сможет вызвать нестатическую функцию-член в экземпляре без указателя на этот экземпляр.
Скажем, у вас есть класс с нормальной функцией-членом, которая не принимает параметров и не возвращает параметров. У вас есть код, который не имеет представления о вашем классе или какой-либо его структуре. Вы хотите дать этому коду достаточно информации для вызова этой функции-члена в конкретном экземпляре класса. Что вы передаете это? Вы не можете передать ему указатель на функцию-член, потому что, не имея представления о вашем классе, он не может вызвать обычную функцию-член класса. Ответ: Вы передаете ему указатель на статическую функцию-член, реализация которой вызывает обычную функцию-член, и вы передаете ему указатель на экземпляр, метод которого вы хотите, чтобы он вызывал.