将结构体传递给线程,如何访问结构体中的多个数据
Passing a struct to a thread, how access multiple data in struct?
我有一个问题。我需要使用OpenCV Mat图像结构体将多个参数传递给线程。
我有一个这样的结构体:
struct Args
{
Mat in[6];
Mat out[6];
};
和一个由线程调用的void函数,如下所示:
void grey (void *param){
while (TRUE)
{
WaitForSingleObject(mutex,INFINITE);
Args* arg = (Args*)param;
cvtColor(*arg->in,*arg->out,CV_BGR2GRAY);
ReleaseMutex(mutex);
_endthread();
}
}
要启动带有两个Mat数组参数的灰色函数作为线程,我在main中使用以下行:
Args dati;
*dati.in = *inn;
*dati.out = *ou;
handle1 = (HANDLE) _beginthread(grey,0,&dati);
现在,我的问题是:我需要访问从线程本身传递给线程的结构中两个数组"in"answers"out"的所有6个元素,或者找到一种将数组从0转移到5的模式,以用"灰色"函数详细说明所有元素。
我怎么能做到这一点从线程或从主?我的意思是使用灰色函数来详细说明[6]结构Args中数组Mat的所有6个元素,我在该模式下传递给线程。
有人能帮助我或给我一个主意吗?我不知道怎么做
在创建线程之前,您可以这样分配数组:
*dati.in = *inn;
*dati.out = *ou;
这只会给赋值数组中的第一个项。数组的其余部分将保持不变。
需要将源阵列中的全部拷贝到目标阵列中。您可以使用std::copy
:
std::copy(std::begin(dati.in), std::end(dati.in), std::begin(inn));
当然,这要求源"数组"inn
包含至少与目标数组相同的项。
然后在线程中循环遍历条目:
for (int i = 0; i < 6; i++)
{
cvtColor(arg->in[i], arg->out[i], CV_BGR2GRAY);
}
当您启动线程时,以下代码:
Args dati;
*dati.in = *inn;
*dati.out = *ou;
只初始化六个元素中的一个。如果inn
和ou
实际上是6个元素的数组,您将需要一个循环来初始化所有6个元素。
Args dati;
for (int i = 0; i < 6; i++) {
dati.in[i] = inn[i];
dati.out[i] = ou[i];
}
同样,在线程中,您只处理数组中的第一个元素。所以这段代码:
Args* arg = (Args*)param;
cvtColor(*arg->in,*arg->out,CV_BGR2GRAY);
需要变成这样:
Args* arg = (Args*)param;
for (int i = 0; i < 6; i++) {
cvtColor(arg->in[i],arg->out[0],CV_BGR2GRAY);
}
相关文章:
- 无法在 Mosquitto MQTT Broker 插件上访问结构体 mosquitto 的元素
- 在C++中使用链表的堆栈实现中,访问结构体headNode成员count和top会导致运行时错误
- 访问不同类的私有结构体成员
- 从结构体访问数据时,操作符重载到哪里去了?
- 定义要在包含的头文件中访问的结构体的正确方法
- 访问结构体中定义的枚举的值
- 将结构体传递给线程,如何访问结构体中的多个数据
- 如何访问结构体中的值
- 访问结构体中定义的枚举值
- 在模板类中使用结构体作为参数并访问它们的元素
- 使用局部变量或多次访问结构体值(c++)
- 从派生类访问基类中的结构体
- 如何实现两个可以相互访问的结构体
- 试图使用指向结构体向量的指针访问结构体类型时出错
- android:无法访问结构体静态数据成员
- 在类LinkedList节点中访问结构体的成员
- 如何从另一个c++类访问一个结构体
- 使用成员变量的偏移量访问结构体的私有成员
- 可以访问传递给模板的结构体吗?
- 在c++中使用迭代器访问结构体