これは最小限のテストケースですが、QThread
というローカルドメインサーバーを起動しようとしたため、UIが邪魔になることはありません。しかし、起動時にqDebug()から出力されたListening
が表示されていましたが、フォームエディタから追加されたウィジェットは完全に消えてしまい、すべてが遅くなりました(ウィンドウのサイズ変更など)。Qtとスレッドローカルサーバー、なぜUI全体が固まったのですか?
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect (&thread , SIGNAL(started()) , SLOT(setupServer()));
thread.start();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::setupServer()
{
struct sockaddr_un address;
int socket_fd, connection_fd;
socklen_t address_length;
// create socket .. and create socket file ..
// bind ...
// listen ..
qDebug() << "Listening ..";
while((connection_fd = ::accept(socket_fd,
(struct sockaddr *) &address,
&address_length)) > -1)
{
qDebug() << "Got an connection.";
::close (connection_fd);
}
// close socket and remove the socket file
}