Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2014, 14:53   #1
royalfint
Пользователь
 
Регистрация: 11.11.2014
Сообщений: 22
Радость Два потока с Qt, Awesomium и C++

Всем привет! Столкнулся я проблемой совмещения Qt и Awesomium, а если точнее то с особенностью Qt. После инициализации главного окна Qt в функции main я выполняю инициализацию ядра Awesomium и загружаю страницу. И вот тут то и подкралась проблема: GUI виснет во время загрузки страницы. То есть главный цикл Qt выполняется после цикла браузера. А мне нужно создать два потока для главного цикла Awesomium и Qt. Читав документацию по Qt я еще больше запутался. Пытаясь что то сделать испортил весь проект и повключал кучу библиотек. Прошу помочь сделать второй параллельный поток для главного цикла Awesomium и желательно использовать QThread, а не QTimer и слоты(с ними проблем больше потом будет). Вот текущий код:
algobinary.h

Цитата:
#ifndef ALGOBINARY_H
#define ALGOBINARY_H

#define WIDTH 1600
#define HEIGHT 1200
#define URL "https://www.goole.com/"

#include <QtGui/QMainWindow>
#include <QtGui/QApplication>
#include <Awesomium/WebCore.h>
#include <Awesomium/BitmapSurface.h>
#include <Awesomium/STLHelpers.h>
#include <QtCore/QTimer>
#include <QtCore/QThread>
#include "ui_algobinary.h"

using namespace Awesomium;

class AlgoBinary : public QMainWindow
{
Q_OBJECT

public:
AlgoBinary(QWidget *parent = 0, Qt::WFlags flags = 0);
~AlgoBinary();
private:
Ui::AlgoBinaryClass ui;
};

#endif // ALGOBINARY_H
algobinary.cpp
Цитата:
#include "algobinary.h"

AlgoBinary::AlgoBinary(QWidget *parent, Qt::WFlags flags) : QMainWindow(parent, flags)
{
ui.setupUi(this);
}

AlgoBinary::~AlgoBinary()
{

}
main.cpp
Цитата:
#include "algobinary.h"

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
AlgoBinary w = new AlgoBinary();
w.show();

WebCore* web_core = WebCore::Initialize(WebConfig());
WebView* view = web_core->CreateWebView(WIDTH, HEIGHT);
//connect(m_timer,SIGNAL(timeout()),t his,SLOT(poll()));
WebURL url(WSLit(URL));
view->LoadURL(url);

while(view->IsLoading())
{
web_core->Update();
}

BitmapSurface* surface = (BitmapSurface*)view->surface();

if (surface != 0)
{
surface->SaveToJPEG(WSLit("./result.jpg"));
}

return a.exec();
}
Всем заранее спасибо!
royalfint вне форума Ответить с цитированием
Старый 11.11.2014, 15:24   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А чего вы делать с Awesomium хотите?

Если не нравится документация Qt по QThread, то можете тут пример посмотреть http://mayaposch.wordpress.com/2011/...l-explanation/ (только поток не надо убивать после загрузки если вы что-то еще будете делать с Awesomium в течение жизни приложения, ибо насколько я помню можно создавать только 1 поток для него, по крайней мере в .NET версии)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 11.11.2014, 15:30   #3
royalfint
Пользователь
 
Регистрация: 11.11.2014
Сообщений: 22
По умолчанию

а я и не собираюсь убивать поток с awes так как буду с ним как раз до QT_EXIT и работать) спасибо за ссылку уже читаю
royalfint вне форума Ответить с цитированием
Старый 11.11.2014, 15:53   #4
royalfint
Пользователь
 
Регистрация: 11.11.2014
Сообщений: 22
По умолчанию

вставил:
Цитата:
QThread* thread = new QThread;
Worker* worker = new Worker();
worker->moveToThread(thread);
connect(thread, SIGNAL(started()), worker, SLOT(process()));
connect(worker, SIGNAL(finished()), thread, SLOT(quit()));
ругается на все аргументы =( про первый пишет что Worker* и QThread* не совместимы с типом SOCKET, про второй пишет что const char* не совместим с const sockadr* а про третий пишет что QThread и int а последнего вообще нет и в общем ошибка типа не найдена подходящая перегрузка
royalfint вне форума Ответить с цитированием
Старый 11.11.2014, 15:54   #5
royalfint
Пользователь
 
Регистрация: 11.11.2014
Сообщений: 22
По умолчанию

нигде про это не написано, пытаюсь делать явное преобразование так vs2010 еще пуще прежнего ругается
royalfint вне форума Ответить с цитированием
Старый 11.11.2014, 16:06   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Если Qt5, то используйте лучше новый синтаксис подключения сигналов/слотов.
http://qt-project.org/wiki/New_Signal_Slot_Syntax
Код:
connect(thread, &QThread::started, worker, &Worker::process);
А чего за сокеты? Где вы их тут взяли? На что именно ругается и какая ошибка?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 11.11.2014, 16:09   #7
royalfint
Пользователь
 
Регистрация: 11.11.2014
Сообщений: 22
По умолчанию

Qt 4.8
SOCKET это тип первого параметра функции connect
royalfint вне форума Ответить с цитированием
Старый 11.11.2014, 16:11   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Вы где этот код вызываете? Метод connect, который для сигналов и слотов, а не который функция для сокетов, это static метод QObject.
Так что пишите QObject::connect
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 11.11.2014 в 16:15.
Alex11223 вне форума Ответить с цитированием
Старый 11.11.2014, 16:33   #9
royalfint
Пользователь
 
Регистрация: 11.11.2014
Сообщений: 22
По умолчанию

спасибо, в этом и была моя ошибка, а я даже и не заметил
royalfint вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать программу, в которой два потока заполняют таблицу умножения a1t2m3 Помощь студентам 9 11.04.2014 19:26
Два потока и ZQuery (ZeosBdo) не работают одновременно fezilk25 Общие вопросы Delphi 0 15.01.2013 00:42
Два потока tigrend Общие вопросы .NET 6 24.04.2010 08:25
В среде Delphi составить программу (процесс), который паралельно запускает два потока (нити) metamfetamin Помощь студентам 9 06.11.2007 15:26
микшер на два потока в проигрывателе музыки. проигрыватель сделан на основе библиотеки Bass.dll D-fens Мультимедиа в Delphi 4 08.06.2007 20:36