Qt + posix threads, непредсказуемое поведение программы
Форум — Development
Привет. Пишу простой мессенджер на c++/Qt, POSIX threads, POSIX sockets, платформа Linux Ubuntu 12.04. Вопрос... Можно ли передать указатель основного потока Qt программы в posix thread, вот листинг
#include <QApplication>
#include "MainWindow.hpp"
#include "pthread.h"
#include <signal.h>
#include <QEvent>
#include <QObject>
#include "MessageEvent.hpp"
//pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
void handler_sigsegv(int signum)
{
QMessageBox m_msg;
m_msg.warning(0,"Warning", "SIGSEGV Error!","POSIX Signal");
signal(signum, SIG_DFL);
exit(3);
}
void* users(void* pt)
{
MainWindow* temp = (MainWindow*)pt;// переданный потоку параметр-указатель класса главного окна
while(1)
{
if(1 == temp->get_login_status())// проверяем залогинился ли юзер
{
QString string = temp->_receving();// ждем и получаем входящее сообщение
if(NULL != string)
{
// функция temp->getHistoryObj() возвращает указатель на QTextEdit
QMetaObject::invokeMethod(temp->getHistoryObj(), "insertPlainText" ,Q_ARG(QString, string));// выводим в QTextEdit
QMetaObject::invokeMethod(temp->getHistoryObj(), "insertPlainText",Q_ARG(QString, "\n"));
}
}
}
}
int main(int argc, char** argv)
{
signal(SIGPIPE, SIG_IGN);// сигнал sigpipe
QApplication app(argc, argv);
signal(SIGSEGV, handler_sigsegv);
MainWindow* m = new MainWindow; //указатель на класс главного окна
pthread_t pt;
m->show();
int res = pthread_create(&pt, NULL, &users, (void*)m); // создаем поток для получения входящих сообщений
return app.exec();
}