потоки

  • Автор темы Nehemian
  • Дата начала
N

Nehemian

Гость
#1
Дяди и Тети помогите разобраться с потоками: Создать несколько потоков (количество можно вводить с клавиатуры). Вывести их в обратном порядке. Потоки создаются с помощью оператора createthread.

Помогите
 
N

Nehemian

Гость
#2
И ??? я этих инструкции начитался уже(((
 
N

Nehemian

Гость
#3
я наваял какую-то хрень, знать бы что это все делает(((
Код:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Button2: TButton;
Memo1: TMemo;
Memo2: TMemo;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
n,f,i:integer;
ThreadHandle: THandle;
ID:DWord;

implementation

procedure Inkrement(var n:integer);
var r:integer;
begin
for r:=n to n+n do
begin

n:=n+1;
end;
end;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
n:=strtoint(edit1.text);
f:=strtoint(edit2.Text);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
//memo1.SelText:=inttostr(Inkrement(n));
ResumeThread(ThreadHandle);
ThreadHandle:=createthread(nil,0,@Inkrement,@n,CREATE_SUSPENDED,ID);
//ThreadHandle.Terminate ;
//TerminateThread(ThreadHandle);
//ThreadHandle.free;

suspendthread(ThreadHandle);
for i:=1 to f do
memo1.SelText:=floattostr(createthread(nil,0,@Inkrement,nil,CREATE_SUSPENDED,ID));

for i:=f downto 1 do
memo2.SelText:=floattostr(createthread(nil,0,@Inkrement,nil,0,ID));


end;
End.
 

vital

Больной Компом Детектед
29.01.2006
2 432
42
#4
Конкретно ваша хрень делает хрень.
 
N

Nehemian

Гость
#6
Так, свой последний вариант я опускаю, он плохой, вот который рабочий, но надо на него поставивть Mutex или семафор помогите

Код:
program Project2;

{$APPTYPE CONSOLE}

uses
SysUtils,
Windows;

var n,t,Ed,RE:integer;
Thred:array[0..255] of Thandle;
ID:Dword;

procedure Sed;
var f,i:integer;
begin
for i:=0 to 4 do
begin
f:=f+5+ed;
writeln(f);
end;
end;

begin
write('Kol-vo Potokov ');
n:=strtoint(paramstr(1));
writeln(n);
for ed:=1 to n do begin
Thred[ed]:=createthread(nil,0,@Sed,nil,CREATE_SUSPENDED,ID);
//CreateMutex(nil,true,Thred[ed]);
//waitforsingleobject(Thred[ed],1000);

end;
//readln;

//writeln('Obratnoe Naprovlenie');
readln;
for ed:=n downto 1 do
begin
ResumeThread(Thred[ed]);
CreateMutex(nil,true,nil);
// Thred[ed]:=createthread(nil,0,@Sed,nil,0,ID);
waitforsingleobject(Thred[ed],1000);
end;


readln;
end.