Написать функцию которая возвращает несколько результатов ?
BYTE BufferData1[256];
DWORD BytesLength1;
DWORD BytesRead1;
Код:
bool __fastcall MyThread1::StartDataRead(как передать из функции BufferData1 ?, как передать из функции BytesRead1 ?, как передать в функцию BytesLength1 ?)
{
OVERLAPPED ReadOL;
DWORD WFSO;
//-------------------------------------------------------------------------
memset(&ReadOL, 0, sizeof(ReadOL));
ReadOL.hEvent = CreateEvent(NULL, TRUE, TRUE, NULL);
if(ReadOL.hEvent == NULL)
{
Form1->Memo1->Lines->Add("Ioeaea CreateEvent");
CloseHandle(HidHandle);
CloseHandle(ReadOL.hEvent);
return 0;
}
//-------------------------------------------------------------------------
if(!ReadFile(HidHandle, BufferData1, BytesLength1, &BytesRead1, &ReadOL))
{
Form1->Memo1->Lines->Add("Ioeaea aneio?iiiiai ?oaiey ReadFile");
CloseHandle(HidHandle);
CloseHandle(ReadOL.hEvent);
return 0;
}
//-------------------------------------------------------------------------
WFSO = WaitForSingleObject(ReadOL.hEvent, INFINITE);
if(WFSO == WAIT_OBJECT_0)
{
if(!GetOverlappedResult(HidHandle, &ReadOL, 0, 1))
{
Form1->Memo1->Lines->Add("?acoeuoao ?oaiey ia iieo?ai GetOverlappedResult");
CloseHandle(HidHandle);
CloseHandle(ReadOL.hEvent);
return 0;
}
else
{
Form1->Memo1->Lines->Add("?acoeuoao ?oaiey iieo?ai GetOverlappedResult");
}
}
else
{
Form1->Memo1->Lines->Add("IOEAEA WaitForSingleObject");
CloseHandle(HidHandle);
CloseHandle(ReadOL.hEvent);
return 0;
}
//-------------------------------------------------------------------------
CloseHandle(ReadOL.hEvent);
return 1;
}
{
OVERLAPPED ReadOL;
DWORD WFSO;
//-------------------------------------------------------------------------
memset(&ReadOL, 0, sizeof(ReadOL));
ReadOL.hEvent = CreateEvent(NULL, TRUE, TRUE, NULL);
if(ReadOL.hEvent == NULL)
{
Form1->Memo1->Lines->Add("Ioeaea CreateEvent");
CloseHandle(HidHandle);
CloseHandle(ReadOL.hEvent);
return 0;
}
//-------------------------------------------------------------------------
if(!ReadFile(HidHandle, BufferData1, BytesLength1, &BytesRead1, &ReadOL))
{
Form1->Memo1->Lines->Add("Ioeaea aneio?iiiiai ?oaiey ReadFile");
CloseHandle(HidHandle);
CloseHandle(ReadOL.hEvent);
return 0;
}
//-------------------------------------------------------------------------
WFSO = WaitForSingleObject(ReadOL.hEvent, INFINITE);
if(WFSO == WAIT_OBJECT_0)
{
if(!GetOverlappedResult(HidHandle, &ReadOL, 0, 1))
{
Form1->Memo1->Lines->Add("?acoeuoao ?oaiey ia iieo?ai GetOverlappedResult");
CloseHandle(HidHandle);
CloseHandle(ReadOL.hEvent);
return 0;
}
else
{
Form1->Memo1->Lines->Add("?acoeuoao ?oaiey iieo?ai GetOverlappedResult");
}
}
else
{
Form1->Memo1->Lines->Add("IOEAEA WaitForSingleObject");
CloseHandle(HidHandle);
CloseHandle(ReadOL.hEvent);
return 0;
}
//-------------------------------------------------------------------------
CloseHandle(ReadOL.hEvent);
return 1;
}
передавать в функцию либо ссылку либо указатель. читать - передача параметров по ссылке
Создал еще один поток и написал в нем функцию ту что привел выше и теперь хочу ее вызвать в основном потоке но не получается , вопросы: 1. где будет исполнятся функция, в потоке где она определена или в том где вызвал? 2. как все написать правильно чтобы вообще эту функцию можно было вызывать в основном потоке и чтобы она передавала параметры из второго потока? 3. не могу разобраться с синхронизацией где вызывать функцию синхронизации и что в ней указывать?
Функция описывается не в потоке,а в коде!Вызывать её можно из любого потока,просто будет выполнен соответствующий код в контексте вызывающего потока
Спасибо за разъяснения, теперь понятно.