Мне нужно отправить тот же экземпляр объекта класса в две функции (основная функция и функция потока)
Программа что-то вроде этого
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)
Вы можете определить конструктор для 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)
F1(ABC* obj)
и передайте указатель на него в качестве аргумента в_beginthread
как_beginthread(F1,0,(void*)obj);
,std::thread
et.al.