struct Single_data
{
int write_flag = 2;
char cs[7];
char cs2[9];
float num;
unsigned long long mum20;
unsigned long long mum50;
unsigned long long mum100;
unsigned long long mum200;
unsigned long long mum20_1;
unsigned long long mum50_1;
unsigned long long mum100_1;
unsigned long long mum200_1;
CStringArray Path1;
CStringArray Path2;
};
struct OneThreade_Data_List
{
Single_data OneThreade_Data_list[5][200]; // 5线程
};
//工作者线程声明
static UINT __cdecl OneThreadeComp(LPVOID pParam);
Single_data n_OneThreade_Data_list[5][200];
m_hThread[0] = AfxBeginThread(OneThreadeComp, &n_OneThreade_Data_list[0]);
//工作者线程的实现
UINT __cdecl CRead::OneThreadeComp(LPVOID pParam)
{
OneThreade_Data_List* p_onethreade_data = (OneThreade_Data_List*)pParam;
Single_data s_data[5][200];
s_data = *p_onethreade_data; //这里是伪代码, 希望从pParam指针中读出内容 赋值给s_data
return 0;
}
UINT __cdecl OneThreadeComp(LPVOID pParam)
{
OneThreade_Data_List* p_onethreade_data = (OneThreade_Data_List*)pParam;
Single_data (*p)[200];
p = p_onethreade_data->OneThreade_Data_list; //这里是伪代码, 希望从pParam指针中读出内容 赋值给s_data
printf("cs = %s\n",p[0][0].cs);
printf("num = %f\n", p[0][0].num);
//直接使用
printf("cs = %s\n", p_onethreade_data->OneThreade_Data_list[0][0].cs);
printf("num = %f\n", p_onethreade_data->OneThreade_Data_list[0][0].num);
return 0;
}
void test()
{
Single_data n_OneThreade_Data_list[5][200];
n_OneThreade_Data_list[0][0].num = 1;
strcpy(n_OneThreade_Data_list[0][0].cs, "aa");
AfxBeginThread(OneThreadeComp, &n_OneThreade_Data_list);
}
调用test函数,就可以了。已在vs2019 MFC项目上验证过,望采纳
#include <stdio.h>
#include <string.h>
int main()
{
int src[2][3] = { 1,2,3,4,5,6 };
void *p = &src[0];
int dest[2][3];
memcpy(&dest[0], p,sizeof(dest) );
return 0;
}
参考上面例子,看能否解决
直接类型强转不行吗
UINT __cdecl CRead::OneThreadeComp(LPVOID pParam)
{
//二维数组,两个**
OneThreade_Data_List** p_onethreade_data = (OneThreade_Data_List**)pParam;
Single_data s_data[5][200];
for(int i = 0; i < 5; i++)
{
for(int j = 0; j < 200; j++)
{
s_data[i][j] = p_onethreade_data[i][j]
}
}
return 0;
}