在C++ PythOnQt中,如何在每个线程中使用的变量名相同,但如何使用不同的值呢?

2024-10-04 01:23:47 发布

您现在位置:Python中文网/ 问答频道 /正文

<> BR/>我在C++中使用多线程PythOnQt。 在不同线程中使用相同名称的值时,我希望使用不同的值 请帮帮我…

[代码:运行多线程]

int nRet = PyEval_ThreadsInitialized();
if (Py_IsInitialized() == 0)
{
    Py_Initialize();
    PyEval_InitThreads();
    m_pyMainThread = PyEval_SaveThread();
}

std::shared_ptr<PythonWorkerThread> pythonWorker1 = std::make_shared<PythonWorkerThread>();
std::shared_ptr<PythonWorkerThread> pythonWorker2 = std::make_shared<PythonWorkerThread>();
pythonWorker1->setObjectName("1");
pythonWorker2->setObjectName("2");
pythonWorker1->start();
pythonWorker2->start();

[代码:运行WorkerThread]

void PythonWorkerThread::run()
{
    qDebug() << "Thread Run = " << objectName() << " ThreadID = " << (int)QThread::currentThreadId();

    auto state = PyGILState_Ensure();

    for (int i = 0; i < 10; ++i)
    {
        PythonQt::self()->addVariable(PythonQt::self()->getMainModule(), "SharedValue", i);
        QString strScrip = QString("import time\n" "time.sleep(%1)\n").arg(objectName().toInt());
        PyRun_SimpleString(strScrip.toStdString().c_str());
        qDebug() << "Thread = " << objectName() << ", i =" << i << PythonQt::self()->getMainModule().getVariable("SharedValue");
    }
    PyGILState_Release(state);
    qDebug() << "Thread End" << objectName();
}



[结果:粗体是不正确的值]

Thread Run=“1”ThreadID=25884
Thread Run=“2”ThreadID=21848
Thread=“1”,i=0 QVariant(int,0)
Thread=“2”,i=0 QVariant(int,1)
Thread=“1”,i=1 QVariant(int,1)
Thread=“1”,i=2 QVariant(int,2)
Thread=“2”,i=1 QVariant(int,3)
Thread=“1”,i=3 QVariant(int,2)
Thread=“1”,i=4 QVariant(int,4)
Thread=“2”,i=2 QVariant(int,5)
Thread=“1”,i=5 QVariant(int,3)
Thread=“1”,i=6 QVariant(int,6)
Thread=“2”,i=3 QVariant(int,7)
Thread=“1”,i=7 QVariant(int,4)
Thread=“1”,i=8 QVariant(int,8)
Thread=“2”,i=4 QVariant(int,9)
Thread=“1”,i=9 QVariant(int,5)
螺纹端“1”
线程0x651c已退出,代码为0(0x0)。
Thread=“2”,i=5 QVariant(int,5)
Thread=“2”,i=6 QVariant(int,6)
Thread=“2”,i=7 QVariant(int,7)
Thread=“2”,i=8 QVariant(int,8)
Thread=“2”,i=9 QVariant(int,9)
螺纹端“2”
线程0x5558已退出,代码为0(0x0)。


Tags: run代码线程threadintsharedstdpyeval