Добрый день, коллеги!
Нужна помощь!!
Создал структуру IPADDRESS, а потом прикрутил его в вектор ipAddress_vec.
Там где 111...1 я его заполняю.
Там где 222...2 пытаюсь его запустить функцию getDataCPU в нескольких потоках через _beginthreadex, в зависимости от того, сколько элементов в ipAddress_vec.
В функции getDataCPU происходит простой вывод на экран, и тут проблема становится очевидной.
Выводит на экран только последний элемент вектора для всех 3-х случаев.
(Смотри прин-скрин командной строки.)
Гугление не помогает.
Как быть? Что делать?
Спасибо большое!
Переменные:
struct IPADDRESS
{
int employeeID;
char* ipAddress;
int step;
};
vector <IPADDRESS> ipAddress_vec;
IPADDRESS ipAddressStrucIn;
IPADDRESS ipAddressStrucOut;
IPADDRESS* ipAddressStruct = (IPADDRESS*)malloc(sizeof(IPADDRESS));
Кусок кода main:
ResultSet *rs = stmt->executeQuery();
while (rs->next())
{
ipAddressStrucIn.employeeID = rs->getInt (1);
t1 = rs->getInt (2);
t2 = rs->getInt (3);
t3 = rs->getInt (4);
t4 = rs->getInt (5);
ss << t1 << "." << t2 << "." << t3 << "." << t4;
t = ss.str();
ipAddressStrucIn.ipAddress = strdup(t.c_str());
ipAddress_vec.push_back(ipAddressStrucIn);
cout << ipAddressStrucIn.ipAddress << endl;
cout << ipAddressStrucIn.employeeID << endl;
//clear
ss.str(std::string());
ss.clear();
t.clear();
}
cout << "11111111111111111111111111111111" << endl;
//const *int threadSize = (int) ipAddress_vec.size();
HANDLE threads[1000];
for (d=0;d<(int) ipAddress_vec.size();d++) {
ipAddressStrucOut = ipAddress_vec[d];
cout << "22222222222222222222222222222222" << endl;
ipAddressStruct->employeeID = ipAddressStrucOut.employeeID;
ipAddressStruct->ipAddress = ipAddressStrucOut.ipAddress;
ipAddressStruct->step = d;
threads[d] = (HANDLE)_beginthreadex(NULL,0,&getDataCPU, (void *) ipAddressStruct,0,NULL);
}
Sleep(5000);
// пробовал, не помогло
//WaitForMultipleObjects(1000, threads, true, INFINITE);
for(d=0;d<ipAddress_vec.size();d++) {
cout << "33333333333333333333333333333" << endl;
WaitForSingleObject( threads[d], INFINITE );
CloseHandle(threads[d]);
}
getDataCPU:
unsigned __stdcall getDataCPU( void* pArguments )
{
cout << "44444444444444444444444444444444" << endl;
IPADDRESS *ipAddress2 = static_cast<IPADDRESS*>(pArguments);
cout << ipAddress2->employeeID <<endl;
cout << ipAddress2->ipAddress <<endl;
cout << ipAddress2->step <<endl;
cout << GetCurrentThreadId() << endl;
_endthreadex( 0 );
return 0; // Program successfully completed.
}