如何在c ++中的两个函数中传递相同的对象实例

时间:2014-02-24 07:47:22

标签: c++ multithreading class object

我需要在两个函数(主函数和线程函数)中发送一个类的对象实例

程序是这样的

Class ABC
{
}obj(32);

void F1()
{
   obj.test;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
     obj.test1;
    _beginthread(F1,0,(void*)number);
}

在上面的示例中,我创建了类ABC并将其对象声明为obj(32)。我在Main函数中调用此对象。在Main函数中,使用thread调用函数'F1',在函数'F1'中调用相同的对象'obj'。

当如上所示创建ABC类的对象时,代码运行良好。我的问题是从文件中读取对象('32')中传递的值。

如果我在Main函数和函数'F1'中单独读取文件并创建对象,则不执行函数'F1'。

如何为Main函数和函数'F1'创建相同的对象实例,并在从文件中取出的对象中传递值。

用于从文件中读取的代码是

FILE *fileread;
int character;
fileread=fopen("C:/file.txt", "r");
if (fileread==NULL) 
{ 
return 1; // exit with failure 
}
int n,number;
while((fscanf(fileread, "%d",&n))==1)
{
number=n;
}
fclose(fileread);

现在,创建的对象应该像obj(number)

同一个ABC obj(number)实例将在主函数和函数'F1'中定义。

//////////////////更新了一个/////////////////////////// ///////////////////

我的班级是这样的

Class ABC
{
public:
    DWORD *IdG;

   ABC(int number)
   { 
       IdG = new DWORD[number];
   }
}

然后我定义了typedef,这样我就可以在beginthread中发送两个参数

typedef struct ST{ 
    int num; 
    CMinimalServer* srv1;
}thestruct; 

我的功能是这样的

void F1(thestruct* st)

主要功能是

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
    thestruct st;
    st.num =32;
    st.srv1; // problem is here how to specify class constructor as srv1(32).

    //beginthread part is modified as below
    _beginthread((void(*)(void*))ModbusReadWrite,0,(void*)&st);

我需要将类对象创建为ABC srv1(32)

1 个答案:

答案 0 :(得分:0)

您可以为结构定义构造函数:

typedef struct ST {
    int num;
    CMinimalServer* srv1;
    explicit ST(int num);
} thestruct; 

ST::ST(int _num) : num(_num), srv1(new ABC(_num))
{
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
     thestruct st(32);
     // here:
     // st.num == 32
     // st.srv1 points to ABC(32)