0
for(unsigned int mBlock = 0; mBlock < coords.size(); mBlock++)
{   
    WidgetType widgetType; 
    height = macBlockWidth + coords[mBlock].y;
    width = macBlockHeight + coords[mBlock].x;

    macBlockParent = new QWidget;
    cooefsLink = new QPushButton(macBlockParent);
    macBlock = new QWidget(macBlockParent);
    widgetType.widget = macBlock;
    widgetType.type = (macBlocks[mBlock][2] != 'S') 
                        ? (macBlocks[mBlock][0]) : (macBlocks[mBlock][2]);
    blockWidgetTypes.push_back(widgetType);

    connect(cooefsLink, SIGNAL(released()), 
                                    this, SLOT(showCoefficients()));
    buttonSignals[cooefsLink] = mBlock;

    constructMotionVector(mBlock);
    macBlockLayout->addWidget(macBlockParent, height - 16, width - 16);
    styleMacroBlocks(mBlock);
}

我可以从这个 for 循环中创建一个函数,我可以通过将它分成两个不同的 for 循环来并行操作,这两个循环都同时在向量上运行。一个处理前半部分的项目,第二个线程构建下半部分。所以例如

线程 1

for(unsigned int mBlock = 0; mBlock < coords.size() / 2; mBlock++)
{   
    WidgetType widgetType; 
    height = macBlockWidth + coords[mBlock].y;
    width = macBlockHeight + coords[mBlock].x;

    macBlockParent = new QWidget;
    cooefsLink = new QPushButton(macBlockParent);
    macBlock = new QWidget(macBlockParent);
    widgetType.widget = macBlock;
    widgetType.type = (macBlocks[mBlock][2] != 'S') 
                        ? (macBlocks[mBlock][0]) : (macBlocks[mBlock][2]);
    blockWidgetTypes.push_back(widgetType);

    connect(cooefsLink, SIGNAL(released()), 
                                    this, SLOT(showCoefficients()));
    buttonSignals[cooefsLink] = mBlock;

    constructMotionVector(mBlock);
    macBlockLayout->addWidget(macBlockParent, height - 16, width - 16);
    styleMacroBlocks(mBlock);
}

线程 2

for(unsigned int mBlock = coords.size() / 2; mBlock < coords.size(); mBlock++)
{   
    WidgetType widgetType; 
    height = macBlockWidth + coords[mBlock].y;
    width = macBlockHeight + coords[mBlock].x;

    macBlockParent = new QWidget;
    cooefsLink = new QPushButton(macBlockParent);
    macBlock = new QWidget(macBlockParent);
    widgetType.widget = macBlock;
    widgetType.type = (macBlocks[mBlock][2] != 'S') 
                        ? (macBlocks[mBlock][0]) : (macBlocks[mBlock][2]);
    blockWidgetTypes.push_back(widgetType);

    connect(cooefsLink, SIGNAL(released()), 
                                    this, SLOT(showCoefficients()));
    buttonSignals[cooefsLink] = mBlock;

    constructMotionVector(mBlock);
    macBlockLayout->addWidget(macBlockParent, height - 16, width - 16);
    styleMacroBlocks(mBlock);
}

因为它对我的系统来说是一个真正的瓶颈,我注意到它只使用一个 CPU 并且它最大化了那个 CPU。任何帮助都会非常感谢。

4

1 回答 1

0

嗯......如果你有这样的结构:blockWidgetTypes.push_back(widgetType);两个线程中,多线程执行似乎非常危险。

于 2013-03-20T21:52:37.487 回答