Вот минимальный тестовый пример, я попытался запустить сервер локального домена с QThread
, поэтому пользовательский интерфейс не должен зависать.Но когда он запустился, я увидел Listening
вывод из qDebug (), но виджеты, добавленные из редактора форм, полностью исчезли, все пошло медленно (например, изменение размера окна), если я удаляю thread.start()
, пользовательский интерфейс отображается и работает хорошо.
#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
}