
30.08.2007, 23:24
|
|
Познающий
Регистрация: 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);
}
}
|
|
|