
25.09.2009, 23:56
|
|
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
С нами:
9410786
Репутация:
2731
|
|
Сообщение от Hiro Protagonist
2Ra$cal
мьютексы намного тормознее интерлокеда и в этом примере не надо их применять.
2mailbrush
1. Ааа, я понял. Тебе нужно чтобы несколько потоков обрабатывали некий диапазон. Дык разбивай диапазон этот на части и передавай поддиапазон (начало/размер) в поток. Там локальной переменной присваивай начальный uid диапазона и в цикле проходи все. Тогда тебе ненужна синхронизация и глобальная переменная. А то в начале у тебя код другое подразумевал ).
2. пример с передачей параметров в поток я приводил на первой странице.
В точку! Но опять какая-то фигня... Параметры не передаются, решил сделать по-другому, но и здесь не пашет...
Функция, которая вызывает поток:
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
start[0]=0;
start[1]=20;
start[2]=40;
start[3]=60;
end[0]=20;
end[1]=40;
end[2]=60;
end[3]=80;
//InitializeCriticalSection( &cs );
for(i=1;i<=4;i++)
{
_beginthread(tfunc, 0, NULL);
}
}
Глоб. переменные:
Код:
volatile long uid = 1;
CRITICAL_SECTION cs;
int i;
int myID = 0;
int *start = (int*)malloc(5*4);
int *end = (int*)malloc(5*4);
Сам поток:
Код:
void tfunc(void *argv)
{
int j;
char request[1024*5], response[1024*5];
int first, second;
char* headers;
myID = InterlockedIncrement(&uid) - 1;
sockaddr_in s_a;
WSADATA wd;
WSAStartup( MAKEWORD( 2, 2 ), &wd );
for(j=start[myID]-1;j<=end[myID];j++)
{
SOCKET s = socket( AF_INET, SOCK_STREAM, 0 );
if (s == INVALID_SOCKET)
ShowMessage("INVALID");
s_a.sin_addr.s_addr = inet_addr( "89.188.109.206" );
s_a.sin_port = htons( 80 );
s_a.sin_family = AF_INET;
if (connect( s, (struct sockaddr*)&s_a, sizeof( s_a ) ) == SOCKET_ERROR)
ShowMessage("Bad Connect!");
sprintf( request, "GET /forum/profile.php?mode=viewprofile&u=%i HTTP/1.1\r\nHost: tfile.ru\r\nConnection: Close\r\n\r\n", j);
send( s, request, strlen( request ), 0 );
//EnterCriticalSection( &cs );
for(i=0;i<=10;i++)
recv( s, response, 1024 , 0 );
//LeaveCriticalSection( &cs );
closesocket( s );
}
WSACleanup(); //
}
Вообще хз как работает...
Буду преблагодарен за помощь...
|
|
|