Показать сообщение отдельно

  #6  
Старый 30.08.2007, 23:24
Satell
Познающий
Регистрация: 13.01.2007
Сообщений: 78
С нами: 10171631

Репутация: 10
По умолчанию

делаю потоки таким образом с таймаутом 5 сек, виснуть перестало, но иногда возникает такое, что пропадает связь на модеме (нельзя открыть ничего в броузере) и все идет в таймаут "Can not connect to server" ровно раз в 5 сек, пока не завершишь программу, перегрузка какая-то чтоли, по идее все потоки должны завершаться через 5 сек, всё ли правильно в программе? а как сделать чтобы потоки работали параллельно несколько или они и так работают, но почему тогда puts(pThreadParm->url); выводит ровно раз в 5 сек...

Код:
DWORD WINAPI WorkerFunction( LPVOID );

typedef struct
{
       char* url;
	...структура данных для рабочей функции
} PARM;

int num=0;

DWORD WINAPI WorkerFunction(IN LPVOID vThreadParm)
//vThreadParm - points to PARM passed to thread
{
       PARM* pThreadParm;
       // Initialize local pointer to void pointer passed to thread
       pThreadParm = (PARM*)vThreadParm;
       
       ...тут обрабатывающий код
      puts(pThreadParm->url);

       return 0;
}


int main(int argc, char* argv[])
{
DWORD   dwTimeout;
PARM    threadParm;

HANDLE   hThread; 
DWORD    dwThreadID;


for (int j=0; j<num; j++)
{
hThread = CreateThread(
                     NULL,            // Pointer to thread security attributes 
                     0,               // Initial thread stack size, in bytes 
                     WorkerFunction,  // Pointer to thread function 
                     &threadParm,     // The argument for the new thread
                     0,               // Creation flags 
                     &dwThreadID      // Pointer to returned thread identifier 
                 );    

dwTimeout = 5000; // in milliseconds

if ( WaitForSingleObject ( hThread, dwTimeout ) == WAIT_TIMEOUT )
{
           cout << "Can not connect to server";
}

CloseHandle (hThread);
}
}
 
Ответить с цитированием