В данной статье приведу пример потоков через WinAPI. Будем выводить счетчик на “контексте” приложения. Если переписать аналогичный пример через классы Delphi, то у меня не срабатывает (программа начинает себя вести не адекватно). Возможно что-то не так делаю. Поэтому решил попробовать создать потоки для данной задачи через WinAPI. Итак создадим проект VCL и на форме отобразим пару кнопок.
Далее напишем такой код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
function ThreadFunc(P:Pointer):LongInt;stdcall; var i: integer; dc: HDC; s: string; begin dc := GetDc(Form.Handle); for i := 0 to 1000000 do begin s := inttostr(i); Textout(dc, 100, 20, PChar(S),length(s)) end; ReleaseDC(Form.Handle, dc); end; |
На Use Thread используем функцию CreateThread
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
procedure TForm.ButtonClick(Sender: TObject); var hThread: THandle; ThreadID: DWord; begin hthread:= Createthread(nil, 0, @Threadfunc, nil, 0, ThreadID ); if hThread=0 then showmessage('No thread'); end; |
На NoThread
1 2 3 4 |
procedure TForm1.Button2Click(Sender: TObject); begin ThreadFunc(nil); end; |
В результате получим следующее. При нажатии на Use Thread окно передвигается мышкой. При NoThread нужно дождаться окончания счетчика.