C++:我可以在线程仍在运行时为线程提供新值,还是必须先结束它?
c++: can I give a new value to a thread, while it is still running or do I have to end it first?
我刚刚开始在编码时使用线程,我不确定我是否正确理解了它们的工作原理。 如果我做对了,使用线程可以使两个函数同时运行。是否可以在其中一个函数仍在并行运行时更改给定的值? 就我而言,我从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()
以等待其完成。
关于线程与其他组织代码的多处理方式(例如繁重的进程(的问题是,尽管我们已经看到每个线程都有自己的调用堆栈,但它们都共享相同的内存。
因此,虽然无法修改线程启动函数的参数(该训练已经通过(...但是,代码的其他部分可以简单地更改内存(共享(中的某些值,并且线程的启动函数可以定期检查该内存以检测更改并修改其行为。
但这带来了一个不同的问题:从多个线程访问/读取/写入共享内存可能会导致不可预测的结果。因此,(任何类型的(访问都必须通过某种同步(互斥体,原子学......
- 结束另一个线程中使用的对象的生存期
- 使用 shared_ptr 在中断时结束多线程循环
- C++:我可以在线程仍在运行时为线程提供新值,还是必须先结束它?
- 线程池如何结束程序
- 为什么我的线程永远不会结束
- 当进程结束时,处于Sleep()中间的线程会发生什么
- Linux C++程序以一个仍在运行的线程结束后该怎么办
- 线程未正确结束:它忽略失败的循环条件
- 哪个线程以多线程结束
- C++结束从主线程分离的线程
- 函数执行结束时,向量中的线程会发生什么情况
- 如何在给定的openmp线程结束时退出程序
- 等待线程结束(c++)
- 等待线程/s直到另一个线程/s结束
- QThread::quit()是立即结束线程还是等到返回事件循环
- 线程意外结束.c++
- c++在另一个线程中观察main()的结束
- 分离线程执行结束
- 如果由于接收对象的线程已结束而未处理Qt信号,参数会被删除吗?
- 使用async结束线程并超出其未来的范围是否安全?