- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在为 mbed 平台使用 rtos 库。我希望能够跳入线程,以恒定的速率递增某个值,然后在结束时关闭线程。问题在于,从 mbed RTOS 库实现 Thread 的方法只能采用 const void *
参数。这没什么大不了的,除非我需要向它发送一个浮点值数组,其中一个值是指向我需要递增的值的指针(*joint
),而其他值可以简单地是 const
控制增量的范围和速度。我以为我已经控制住了它并在这里找到了一些整洁的代码来正确地转换,但我仍然不断提出 0 值://float (*vals)[4] = (float (*)[ 4])参数;
这是代码,简化为参与线程工作的两个函数。
void increment( void const *args ) { //float *joint, float inc, float target, int speed )
//float (*vals)[4] = (float (*)[4])args;
float *vals = (float* )args;
// joint is the outside value I want to increment
float *joint = &vals[0];
float inc = vals[1];
float target = vals[2];
int speed = (int)vals[3];
float start = 0.5;
if( inc < 0 )
for( *joint = start; *joint > target; *joint+=inc ) {
wait( 0.1 / speed );
}
}
void thread_inc( float *joint, float inc, float target, int speed ){
float args[4] = { *joint, inc, target, (float)speed };
//Thread move( increment, args );
Thread move( increment, &args );
return;
}
预先感谢您为我指明正确方向的任何事情!
最佳答案
我绝对是从 jlunavtgrad、Pat 和 Burton Samograd 那里偷来的。我觉得他们的所有三个答案都真正回答了 OP。
使用表示要传递给新线程上下文的参数的结构可以更好地管理。
args 数组在堆栈上并受thread_inc
范围的限制。通过用结构替换它,您仍然无法解决此处涉及的范围问题。因此,需要以其他线程上下文可以正确使用它们的方式分配参数(以任何形式)——这可以通过全局或堆来完成。
thread_inc
的float *joint
参数被解除引用,该值用于填充参数。这似乎不是所需的行为,因为只会修改参数数组中复制的值。
代码中的建议修改:
struct thread_args {
float * joint;
float inc;
float target;
int speed;
};
void increment( void const *args ) {
thread_args* threadArgs = static_cast<thread_args*>( args );
float *joint = threadArgs->joint;
float inc = threadArgs->inc;
float target = threadArgs->target;
int speed = threadArgs->speed;
float start = 0.5;
if( inc < 0 ){
for( *joint = start; *joint > target; *joint+=inc ) {
wait( 0.1 / speed );
}
}
delete threadArgs;
}
void thread_inc( float *joint, float inc, float target, int speed ){
thread_args* threadArgs = new thread_args;
threadArgs->joint = joint;
threadArgs->inc = inc;
threadArgs->target = target;
threadArgs->speed = speed;
//Thread move( increment, args );
Thread move( increment, threadArgs );
return;
}
与此解决方案相关的最后一个建议是,不要以原始形式使用 new
和 delete
,而是使用某种智能指针,例如 shared_ptr
。
关于c++ - 从 const void * 转换为 float 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10387496/
我正在尝试创建一个包含 int[][] 项的数组 即 int version0Indexes[][4] = { {1,2,3,4}, {5,6,7,8} }; int version1Indexes[
我有一个整数数组: private int array[]; 如果我还有一个名为 add 的方法,那么以下有什么区别: public void add(int value) { array[va
当您尝试在 JavaScript 中将一个数组添加到另一个数组时,它会将其转换为一个字符串。通常,当以另一种语言执行此操作时,列表会合并。 JavaScript [1, 2] + [3, 4] = "
根据我正在阅读的教程,如果您想创建一个包含 5 列和 3 行的表格来表示这样的数据... 45 4 34 99 56 3 23 99 43 2 1 1 0 43 67 ...它说你可以使用下
我通常使用 python 编写脚本/程序,但最近开始使用 JavaScript 进行编程,并且在使用数组时遇到了一些问题。 在 python 中,当我创建一个数组并使用 for x in y 时,我得
我有一个这样的数组: temp = [ 'data1', ['data1_a','data1_b'], ['data2_a','data2_b','data2_c'] ]; // 我想使用 toStr
rent_property (table name) id fullName propertyName 1 A House Name1 2 B
这个问题在这里已经有了答案: 关闭13年前。 Possible Duplicate: In C arrays why is this true? a[5] == 5[a] array[index] 和
使用 Excel 2013。经过多年的寻找和适应,我的第一篇文章。 我正在尝试将当前 App 用户(即“John Smith”)与他的电子邮件地址“jsmith@work.com”进行匹配。 使用两个
当仅在一个边距上操作时,apply 似乎不会重新组装 3D 数组。考虑: arr 1),但对我来说仍然很奇怪,如果一个函数返回一个具有尺寸的对象,那么它们基本上会被忽略。 最佳答案 这是一个不太理
我有一个包含 GPS 坐标的 MySQL 数据库。这是我检索坐标的部分 PHP 代码; $sql = "SELECT lat, lon FROM gps_data"; $stmt=$db->query
我需要找到一种方法来执行这个操作,我有一个形状数组 [批量大小, 150, 1] 代表 batch_size 整数序列,每个序列有 150 个元素长,但在每个序列中都有很多添加的零,以使所有序列具有相
我必须通过 url 中的 json 获取文本。 层次结构如下: 对象>数组>对象>数组>对象。 我想用这段代码获取文本。但是我收到错误 :org.json.JSONException: No valu
enter code here- (void)viewDidLoad { NSMutableArray *imageViewArray= [[NSMutableArray alloc] init];
知道如何对二维字符串数组执行修剪操作,例如使用 Java 流 API 进行 3x3 并将其收集回相同维度的 3x3 数组? 重点是避免使用显式的 for 循环。 当前的解决方案只是简单地执行一个 fo
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我有来自 ASP.NET Web 服务的以下 XML 输出: 1710 1711 1712 1713
如果我有一个对象todo作为您状态的一部分,并且该对象包含数组列表,则列表内部有对象,在这些对象内部还有另一个数组listItems。如何更新数组 listItems 中 id 为“poi098”的对
我想将最大长度为 8 的 bool 数组打包成一个字节,通过网络发送它,然后将其解压回 bool 数组。已经在这里尝试了一些解决方案,但没有用。我正在使用单声道。 我制作了 BitArray,然后尝试
我们的数据库中有这个字段指示一周中的每一天的真/假标志,如下所示:'1111110' 我需要将此值转换为 boolean 数组。 为此,我编写了以下代码: char[] freqs = weekday
我是一名优秀的程序员,十分优秀!