Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.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

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++ c++;:我可以在线程仍在运行时给它一个新值,还是必须先结束它?_C++_Multithreading_Function_Csv - Fatal编程技术网

C++ c++;:我可以在线程仍在运行时给它一个新值,还是必须先结束它?

C++ c++;:我可以在线程仍在运行时给它一个新值,还是必须先结束它?,c++,multithreading,function,csv,C++,Multithreading,Function,Csv,我刚开始在编码时使用线程,我不确定我是否正确理解它们的工作原理。 如果我做对了,用一个线程,你可以让两个函数同时运行。当其中一个函数仍然并行运行时,是否可以更改给定给它的值? 在我的情况下,我从csv文件中读取说明,例如: colAction=VELOCITY; colTime=0; colParam1=-30; colParam2=2; colAction=VELOCITY; colTime=10; colParam1=-15; colParam2=0.4

我刚开始在编码时使用线程,我不确定我是否正确理解它们的工作原理。 如果我做对了,用一个线程,你可以让两个函数同时运行。当其中一个函数仍然并行运行时,是否可以更改给定给它的值? 在我的情况下,我从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++中,主线程(启动所有线程的线程)将在堆栈底部具有
intmain(intargc,char**argv)
函数。这适用于多线程程序的单线程和主线程

剩下的线呢。那么,对于每一个函数,您都将指定一个起始函数。线程(和主线程)将在start函数开始时开始执行,并一直运行到结束。线程在执行其启动函数时将处于活动状态

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

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

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


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

有些人在遇到问题时会认为“我知道,我会使用多线程”。但如果温度后面跟着速度,我需要保持温度函数运行,同时启动速度函数。不,你不需要,只需要调用温度函数,然后调用速度函数。只要让这些函数立即返回即可,“我希望我能以某种方式把我的问题弄清楚……”最好的方法是编写一些代码。然后,如果代码没有做你认为它应该做的事情,你可以在这里展示它,并询问人们为什么不做。在线程之间传递数据是很常见的。您的工作线程需要等待某个同步数据容器提供输入。你的问题太宽泛了。你使用的是哪本C++书?选择一个多线程编程;这将是早期的例子之一。