Как передать один и тот же экземпляр объекта в две функции в C ++

0

Мне нужно отправить тот же экземпляр объекта класса в две функции (основная функция и функция потока)

Программа что-то вроде этого

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 функция F1 генерируется с помощью потока, а тот же объект 'obj' вызывается в функции 'F1'.

Код работает хорошо, когда объект класса ABC создается, как показано выше. Моя проблема заключается в том, что значение, переданное в объекте ('32'), должно быть прочитано из файла.

Если я прочитал файл и создаю объект отдельно в главной функции и функции "F1", тогда функция "F1" не будет выполнена.

Как создать тот же экземпляр объекта для главной функции и функции "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);

Теперь созданный объект должен быть sth как 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)

  • 0
    Создайте параметр функции F1(ABC* obj) и передайте указатель на него в качестве аргумента в _beginthread как _beginthread(F1,0,(void*)obj); ,
  • 2
    Для вас важно использовать (Win-OS) средства потоков низкого уровня? В противном случае я бы рекомендовал использовать std::thread et.al.
Показать ещё 3 комментария
Теги:
class
object
multithreading

1 ответ

0
Лучший ответ

Вы можете определить конструктор для struct:

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)
  • 0
    Спасибо за ответ. Как определить объект структуры в главной функции, когда мы определяем конструктор для структуры. Ранее мы определяли как "thestruct st; st.num = 32; st.srv1"
  • 0
    Я развернул ответ немного. Есть еще детали?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню