C++中如何同时运行俩个dos命令?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++中如何同时运行俩个dos命令?相关的知识,希望对你有一定的参考价值。

问题大概是这样的:我输入一个数字后,程序运行dos命令打开一个文件。然后关闭之前的那个程序。。

可实际上遇到一个问题,我用的是system(dos命令)。分俩行写了俩个dos命令,第一个是打开,第二个才是关闭。运行的时候发现程序必须等到文件关闭后才可以运行到第二个dos命令

所以求教,如何同时打开文件且关闭程序(俩个dos一起)

或者能不能执行第一个dos命令的时候继续运行下去。。

谢谢

先建两个线程,分别system 参考技术A WinExc(dos,SW_SHOW)//SW_HIDE 为隐藏cmd窗口.追问

可以详细些吗?貌似我理解的不能通过编译

追答

WinExec() 函数

参考技术B 用两个进程

如何在 c++ winform 中同时运行两个函数?

【中文标题】如何在 c++ winform 中同时运行两个函数?【英文标题】:How to run two functions simultaneously in c++ winform? 【发布时间】:2021-08-13 18:38:55 【问题描述】:

我在 c++ winform 中使用 opencv,我想使用线程在两个不同的图片框中显示我的网络摄像头。问题是当一个线程启动时另一个线程没有运行,因此其中一个图片框显示网络摄像头实时但另一个是它的静态图片。我想如果我可以同时运行两个线程启动功能,问题就可以解决,但我不知道该怎么做,或者问题只是别的。有人知道怎么做吗使用线程在这两个不同的图片框上显示实时网络摄像头? 任何帮助将不胜感激。

下面是代码

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();

【问题讨论】:

【参考方案1】:

这里是Invoke() 两个图片框更新,这意味着两者都在 UI 线程中同步执行。如果您需要排队,请使用BeginInvoke()。但请注意,start_picture_Box1()start_picture_Box2 都将在 UI 线程上下文中运行。

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

【讨论】:

因此,如果同时调用函数,为什么一个图片框显示实时网络摄像头,而另一个只是静态图片。我希望它们都显示实时网络摄像头我该怎么做解决了吗?

以上是关于C++中如何同时运行俩个dos命令?的主要内容,如果未能解决你的问题,请参考以下文章

c语言中啥指令可以关闭dos窗口

dos里如何同时执行多命令啊?

在c++程序中执行DOS命令

怎么同时运行两个DOS命令

c++如何获取dos命令的返回值

ms-dos下怎么同时用两条命令?