![]() |
Многопоточность с использованием CreateThread [Delphi]
Нужна помощь в понимании потоков :)
До этого момента писал софт однопоточный. Сейчас хочу научиться писать многопоточные программы. Как я понимаю есть несколько реализаций. Знаю что можно написать используя класс TThread и CreateThread (или как пишут, правильней через BeginThread). Интересует именно CreateThread. Есть например такой код: Код:
program threads;Я попробовал так: Код:
program threads;Имеет ли вообще данный код право на жизнь? Можно ли так свободно использовать функции в потоке? Если есть, дайте линки на исходники программ с использованием Winsock + CreateThread. |
держи
http://forum.sources.ru/index.php?showtopic=255212 |
код почти нормальный, но
1) если ты ничего больше с потоками делать не будешь, то сразу закрывай дискриптор потока, а не храни его в массиве 2) прототип функции которая вызывает в потоке чуть другой. т.е. не function fThread(ptr: pointer):integer; а function fThread(ptr: pointer):dword; stdcall; 3) после запуска потоков ты должен дождаться их завершения в твоем случае потоки запустятся, но прога сразу же завершит свою работу. Для таких вещей можно заюзать функцию WaitForMultipleObjects которая имеет вид; DWORD WaitForMultipleObjects( DWORD nCount, // кол-во хендлов const HANDLE* lpHandles, // адрес массива с хендлами BOOL bWaitAll, // TRUE - ожидать завершения всех, FALSE - хотябы одного DWORD dwMilliseconds // таймаут. ставиш INFINITE - бесконечно. ); |
Цитата:
2. Функция WaitForMultipleObjects должна выглядить так: WaitForMultipleObjects(количество_акт ивных_потоков, HThread, TRUE, INFINITE)? Так? т.е. количество активных потоков в моем примере 10. Я правильно понял? |
1) CloseHandle - но т.к. ты юзаеш WaitForMultipleObjects то толжен делать после него закрытие.
2) WaitForMultipleObjects вроде правильно |
http://narod.ru/disk/14455913000/%D0%BF%D0%BE%D1%82%D0%BE%D0%BA%D0%B8.rar.html
Вот исходничек... я когда то программил... помоему то, что нужно... Асинхронная работа... |
Плз отредактируйте две задачки на Pascale, а то постоянные ошибки достали:(!!!
program chast1; uses crt; var a,y,x: real; b:=Pi; c:=2*Pi; dety:=Pi/4; y:=b; while y < = c do begin x:=1-2*cos(a*y)+ln(y); a:=ln(y)/ln(2); writeln(y,x,a); y:=y+dety; end; readln; end. program chast2; x,y,a,b,c,dety:real; i,n:integer begin b:=pi; c:=2*pi; det y:=pi/4; n:=trune ((c-b)/det y); for i:=0 to n do begin y:=b+(dety*i); a:=logln(y)/ln(2); x:=1-2*cos(a*y)+ln(y); writeln(x,a,y); end; readln; end. |
| Время: 09:02 |