C++:我可以在线程仍在运行时为线程提供新值,还是必须先结束它?



我刚刚开始在编码时使用线程,我不确定我是否正确理解了它们的工作原理。 如果我做对了,使用线程可以使两个函数同时运行。是否可以在其中一个函数仍在并行运行时更改给定的值? 就我而言,我从csv文件中读取了说明,例如:

colAction=VELOCITY;     colTime=0;      colParam1=-30;  colParam2=2;
colAction=VELOCITY;     colTime=10;     colParam1=-15;  colParam2=0.4;
colAction=VELOCITY;     colTime=0;      colParam1=-10;  colParam2=1;
colAction=VELOCITY;     colTime=45;     colParam1=-60;  colParam2=11;
colAction=TEMPERATURE;  colTime=120;    colParam1=95;
colAction=TEMPERATURE;  colTime=20;     colParam1=57;
colAction=TEMPERATURE;  colTime=25;     colParam1=95;
colAction=LOOP;                         colParam1=22;   colParam2=7;     colParam3=23;
colAction=TEMPERATURE;  colTime=20;     colParam1=95;
colAction=VELOCITY;     colTime=0;      colParam1=-10;  colParam2=11;
colAction=VELOCITY;     colTime=1;      colParam1=-1;   colParam2=5;
colAction=VELOCITY;     colTime=5;      colParam1=-20;  colParam2=11;

我有一个设置温度的函数和一个设置速度的函数。 参数 colTime 告诉我必须保持速度或温度多长时间,而无需遵循下一个指令。 当 colTime 过期时,我需要遵循下一条指令: 如果一个温度之后是另一个温度 我只是给函数下一个值, 但是如果温度之后是速度,我需要保持温度函数运行,同时启动速度函数。 问题出现了,当设定温度后速度跟随另一个温度时。现在我需要保持速度运行并设置另一个温度。我不知道该怎么做。 我希望我能以某种方式弄清楚我的问题,并且不会太混乱。

通常,一个进程可以看到一堆函数/过程/方法调用。在任何时间点,您的程序都将位于代码的单个点中。

当我们在程序中添加多个线程而不是单个堆栈时,我们现在将有多个函数/过程/方法调用堆栈。它们中的每一个都将在代码的不同点的任何时间点。

在 C/C++ 中,您的主线程(启动这一切的线程(将在堆栈的底部具有int main(int argc,char**argv)函数。这适用于多线程程序的单线程和主线程。

其余的线程怎么样。好吧,对于它们中的每一个,您将指定一个启动函数。线程(和主线程(将在 start 函数开始时开始执行,并运行到结束。线程在执行其启动函数时将处于活动状态。

现在考虑你的代码。许多可能性之一是生成一个线程来执行温度或速度函数。这将是新生成的线程的启动函数。您可以从生成线程中join()以等待其完成。

关于线程与其他组织代码的多处理方式(例如繁重的进程(的问题是,尽管我们已经看到每个线程都有自己的调用堆栈,但它们都共享相同的内存。

因此,虽然无法修改线程启动函数的参数(该训练已经通过(...但是,代码的其他部分可以简单地更改内存(共享(中的某些值,并且线程的启动函数可以定期检查该内存以检测更改并修改其行为。

但这带来了一个不同的问题:从多个线程访问/读取/写入共享内存可能会导致不可预测的结果。因此,(任何类型的(访问都必须通过某种同步(互斥体,原子学......

最新更新