суббота, 13 ноября 2010 г.

Использование потоковых функций в классе

Итак я столкнулся с 1 проблемой,что у меня был класс Server,который работал всего с 1 клиентом.Но это не нормально когда сервер всего для 1 клиента,поэтому пришлось сделать потоковую функция для обработки запросов клиентов:)А т.к при вызове функции CreateThread протокол у функции должен быть иным,чем у функции класса,происходил FAIL.Пришлось выкручиваться.
Покажу реализацию на простом примере.
Простой класс.

class Data;
struct dataStruct
{
Data *data;
HANDLE handle;
};
class Data
{
public:
Data()
:xData(10),
yData(10)
{

}
~Data()
{

}
int & x(){return this->xData;}
int & y(){return this->yData;}
int sum()const{return xData+yData;}
/*Запиливаем потоковую функцию*/
friend DWORD WINAPI thread(void *param)
{
dataStruct *data = (dataStruct*)param;
int count = data->data->sum();
for(int i=0;i< count ; i++)
{
Sleep(100);
cout << data->data->sum() << endl;
data->data->x()++;
data->data->y()++;
}
return 0;
}
private:
int xData;
int yData;
};

А теперь просто в main будем запускать.

void main()
{
for(int i = 0; i<10; i++)
{
Data data;
dataStruct rec;
rec.data = &data;
Sleep(1000);
rec.handle = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)thread,(LPVOID)&rec ,0,0);
}
Sleep(10000);
}

1 комментарий: