У меня есть приложение Qt С++, где есть поток GUI, в котором происходит вычисление с плавающей точкой. Он также открывает QWebView
, где есть флеш-плеер с некоторым видео.
Очевидно, что закрытие QWebView мешает новой операции с плавающей запятой.
Поэтому pow(double, double)
возвращает определенные, но неправильные значения.
В одном случае он возвращал значения 1000
раз больше, чем правильные. В другой раз он вернул 1. #inf
при использовании с аргументами pow(10.0, 2.0)
.
Я должен упомянуть, что он протестирован на разных компьютерах и не относится к конкретному процессору.
Есть ли у вас какие-либо предложения о том, как найти место в Webkit, что-то не так с сопроцессором и как его предотвратить?
Пример (только для x64)
Окружающая среда: Qt 4.7.4, С++, HTML и flowplayer
cpp
wrongpow::wrongpow(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
QVBoxLayout* layout = new QVBoxLayout(0);
m_view = new QWebView(this);
m_view->setMinimumSize(400, 400);
m_view->settings()->setAttribute(QWebSettings::PluginsEnabled, true);
m_view->settings()->setAttribute(QWebSettings::LocalContentCanAccessRemoteUrls, true);
layout->addWidget(m_view);
QDir dir(QApplication::applicationDirPath());
dir.cd("media");
m_view->load(QUrl(QFileInfo(dir, "index.html").absoluteFilePath()));
QPushButton* button = new QPushButton(QLatin1String("Click on video start"), this);
layout->addWidget(button);
Q_ASSERT(connect(button, SIGNAL(clicked()), this, SLOT(closeView())));
setLayout(layout);
adjustSize();
}
Q_SLOT void wrongpow::closeView()
{
delete m_view;
m_view = NULL;
double wrongResult = pow(10.0, 2.0);
Q_ASSERT(wrongResult == 100.0);
}
html
<div id='player' style='width:100%; height:100%;'>
<object width='100%' height='100%' id='_494187117' name='_494187117' data='js/plugins/flowplayer-3.2.18.swf' type='application/x-shockwave-flash'>
<param name='wmode' value='opaque'>
<param name='flashvars' value='config={"clip":{"url":"mp4:vod/demo.flowplayer/buffalo_soldiers.mp4","scaling":"fit","provider":"hddn","live":true},"plugins":{"hddn":{"url":"js/plugins/flowplayer.rtmp-3.2.13.swf","netConnectionUrl":"rtmp://r.demo.flowplayer.netdna-cdn.com/play"}},"canvas":{"backgroundGradient":"none"}}'>
</object>
</div>
Вот полностью работающая программа с источниками: Загрузить 15MB