Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在c++;winform? 我在一个C++ WiFrm中使用OpenCV,我想用线程在两个不同的图片框上显示我的网络摄像头。问题是当一个线程开始时,另一个线程不运行,所以一个图片框显示了网络摄像头,但是另一个是静态的图片。如果我可以运行两个线程启动函数,我想问题可以解决。但我不知道怎么做,或者问题只是别的。有人知道如何使用线程在这两个不同的图片框上显示实时网络摄像头吗? 任何帮助都将受到极大的感谢_C++_Multithreading_Winforms_Opencv - Fatal编程技术网

如何在c++;winform? 我在一个C++ WiFrm中使用OpenCV,我想用线程在两个不同的图片框上显示我的网络摄像头。问题是当一个线程开始时,另一个线程不运行,所以一个图片框显示了网络摄像头,但是另一个是静态的图片。如果我可以运行两个线程启动函数,我想问题可以解决。但我不知道怎么做,或者问题只是别的。有人知道如何使用线程在这两个不同的图片框上显示实时网络摄像头吗? 任何帮助都将受到极大的感谢

如何在c++;winform? 我在一个C++ WiFrm中使用OpenCV,我想用线程在两个不同的图片框上显示我的网络摄像头。问题是当一个线程开始时,另一个线程不运行,所以一个图片框显示了网络摄像头,但是另一个是静态的图片。如果我可以运行两个线程启动函数,我想问题可以解决。但我不知道怎么做,或者问题只是别的。有人知道如何使用线程在这两个不同的图片框上显示实时网络摄像头吗? 任何帮助都将受到极大的感谢,c++,multithreading,winforms,opencv,C++,Multithreading,Winforms,Opencv,下面是代码 void start_picture_Box1() { s1 = true; VideoCapture cap(0); while (s1) { cap >> _frame1; mat2picture bimapconvert; this->pictureBox1->Image = bimapconvert.Mat2Bimap(_frame1); pictureBox1

下面是代码

void start_picture_Box1()
{
    s1 = true;
    VideoCapture cap(0);
    while (s1) {
        cap >> _frame1;

        mat2picture bimapconvert;
        this->pictureBox1->Image = bimapconvert.Mat2Bimap(_frame1);

        pictureBox1->Refresh();
        if (waitKey(1) == 27) {
            break;
        }
    }
}

void start_picture_Box2()
{
    s2 = true;
    VideoCapture cap1(0);
    while (s2) {
        cap1 >> _frame2;

        mat2picture bimapconvert;
        this->pictureBox2->Image = bimapconvert.Mat2Bimap(_frame2);

        pictureBox2->Refresh();
        if (waitKey(1) == 27) {
            break;
        }
    }
}

public: void picture_Box1()

{
    pictureBox1->Invoke(gcnew System::Action(this, &MyForm::start_picture_Box1));
}

 public: void picture_Box2()
 {
     pictureBox2->Invoke(gcnew System::Action(this, &MyForm::start_picture_Box2));
 }


private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
{
ThreadStart^ ThreadMethod1 = gcnew ThreadStart(this, &MyForm::picture_Box1);
ThreadStart^ ThreadMethod2 = gcnew ThreadStart(this, &MyForm::picture_Box2);
Thread^ MyThread1 = gcnew Thread(ThreadMethod1);
Thread^ MyThread2 = gcnew Thread(ThreadMethod2);

MyThread1->Start();
MyThread2->Start();
}
在这里,您可以
Invoke()
两个图片框更新,这意味着它们都在UI线程中同步执行。如果需要排队,请使用
BeginInvoke()
。但是,请注意,
start\u picture\u Box1()
start\u picture\u Box2
都将在UI线程上下文中运行


只能从主线程更新UI,因此只能在位图渲染中获得并行性。您必须分离呈现逻辑并仅在线程函数中保留该部分,UI更新应该在UI线程中。另外,如果您在UI和渲染线程之间共享数据,请确保线程同步正确。

那么,如果同时调用函数,为什么一个picturebox显示实时网络摄像头,而另一个只是静态图片。我将它们都设置为显示实时网络摄像头,如何解决这一问题?