mfc c++问题哈 多线程传参 希望从指针实参中读取该指针指向的内容,并赋值给结构体

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;
}