Qt를 사용하고 FTP/HTTP와 비슷한 일부 네트워크 유형 작업을 수행 할 클래스를 작성하려고합니다. 클래스는 많은 기계들과 연결해야하지만,이 과정에서 상대적인 반응을 보이기 위해 응용 프로그램 UI가 필요하므로 사용자는 작업을 취소하고 응용 프로그램을 종료 할 수 있습니다. 첫 번째 생각은 네트워크 스터디를위한 별도의 스레드이지만 내장 된 Qt FTP/HTTP (및 기타) 클래스는 스레드 사용을 피하고 대신 신호와 슬롯에 의존합니다. 그래서, 비슷한 일을하고 싶습니다 나는 이런 식으로 뭔가를 할 수 기대했다 :작업자 스레드 대신 Qt 신호/슬롯 사용
class Foo : public QObject
{
Q_OBJECT
public:
void start();
signals:
void next();
private slots:
void nextJob();
};
void Foo::start()
{
...
connect(this, SIGNAL(next()), this, SLOT(nextJob()));
emit next();
}
void Foo::nextJob()
{
// Process next 'chunk'
if (workLeftToDo)
{
emit next();
}
}
void Bar::StartOperation()
{
Foo* foo = new Foo;
foo->start();
}
그러나이 작동하지 않고 모든 작업이 완료 될 때까지 UI가 정지. 나는 방출 신호가 실제로 슬롯을 즉시 호출하지는 않을 것이지만 어떻게 든 Qt가 큐에 대기시켜 메인 UI가 여전히 작동 할 수있게되기를 바랬다.
이 작업을하려면 무엇을해야합니까? Qt는 어떻게 하나의 스레드에서 오랜 작업을 수행하는 것처럼 보이는 많은 내장 클래스를 가지고 이것을 달성합니까?
신호가 방출 될 때 슬롯이 대기하고 있는지 확인하려면 해당 슬롯을 연결 함수의 최종 매개 변수로 지정할 수 있습니다. –