C++ c++;:我可以在线程仍在运行时给它一个新值,还是必须先结束它?
我刚开始在编码时使用线程,我不确定我是否正确理解它们的工作原理。 如果我做对了,用一个线程,你可以让两个函数同时运行。当其中一个函数仍然并行运行时,是否可以更改给定给它的值? 在我的情况下,我从csv文件中读取说明,例如: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
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++书?选择一个多线程编程;这将是早期的例子之一。