Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

CreateThread


rimd ©   (2004-01-05 14:37:00) 

что я не правильно пишу?
var
HThread:THandle;
idThread:DWORD;

HThread:=CreateThread(nil,0,@ThreadFNC,nil,0,idThread);


panov   (2004-01-06 12:02:00) [1]

Для создания потока выполняем следующее:

1. Определяем функцию потока.

Например:

function ThreadFunc(s: ShortString):DWORD;stdcall;
begin
MessageBox(0,@s[1],"Это тест",MB_OK);
Result := 1;
end;


2. Определяем переменную для дескриптора потока в пределах нужной нам видимости, например, глобально:

var
H: THandle;


3. Вызываем функцию CreateThread для создания потока.

var
ThreadId: Cardinal;
s: ShortString;
MyExitCode: DWORD;
begin
s := "Test";
H := CreateThread(nil,0,@ThreadFunc,@s,0,ThreadId);
WaitForSingleObject(H,1000);

if GetExitCodeThread(H,MyExitCode) then
begin
if MyExitCode = STILL_ACTIVE
then ShowMessage("Thread is active")
else ShowMessage("Exit Code="+IntToStr(MyExitCode));
end
else ShowMessage("Error");
CloseHandle(H); Не забываем освободить дескриптор!


ak   (2004-01-06 10:48:00) [2]

function ThreadFNC: Boolean;
begin
Result := False;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
HThread: THandle;
idThread: DWORD;
begin
HThread := CreateThread(nil, 0, @ThreadFNC, nil, 0, idThread);
end;

ничего не говорит
компилится
может это я что-то не правильно делаю?


sheriff   (2004-01-06 08:06:00) [3]

переменные
idThread: DWORD;
hThread: THandle;
должны быть объявлены глобально.


Игорь Шевченко   (2004-01-05 15:20:00) [4]

А голова зачем нужна ? Чтобы знать, на каком форуме вопрос задать ?

---
LMD


YuRock   (2004-01-05 15:05:00) [5]

Тогда напиши:

HThread := Windows.CreateThread(nil,0,@ThreadFNC, Pointer(1),0,idThread);


Rimd   (2004-01-05 14:59:00) [6]

variable required


Mystic   (2004-01-05 14:59:00) [7]

function ThreadFNC(Arg: Pointer): Integer;
begin
Result := 0;
MessageBox(0, "test", "test", MB_OK);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
idThread: DWORD;
hThread: THandle;
begin
hThread := BeginThread(nil, 0, @ThreadFNC, nil, 0, idThread);
WaitForSingleObject(hThread, INFINITE);
end;


Там выше у меня ошибка --- при использовании BeginThread, stdcall указывать не надо.


YuRock   (2004-01-05 14:55:00) [8]

> YuRock © (05.01.04 14:53) [10]

Извиняюсь, я не правильно думал. Так что говорит компилятор?


YuRock   (2004-01-05 14:53:00) [9]

Что говорит компилятор? Если то, что я думаю, попробуй

HThread:=CreateThread(nil,0,@ThreadFNC, Pointer(1),0,@idThread);


Mystic   (2004-01-05 14:51:00) [10]

function ThreadFNC(Arg: Pointer): Integer; stdcall;
begin
Result := 0;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
idThread:DWORD;
begin
BeginThread(nil,0,@ThreadFNC,nil,0,idThread);
end;


Use this routine or a TThread object to spawn separate threads of execution instead of calling the CreateThread Win32API directly. BeginThread encapsulates the Win32 CreateThread API call, but unlike CreateThread, it sets the global IsMultiThread variable, thereby making the heap thread-safe.


rimd   (2004-01-05 14:48:00) [11]

HThread:=CreateThread(nil,0,@ThreadFNC,<сюда ставит курсор и говорит variable required>nil,0,idThread);


default   (2004-01-05 14:48:00) [12]

"какая разница? компилятор говорит что я козел и делаю все неправильно!"
орех!!!!!


YuRock   (2004-01-05 14:46:00) [13]

Попробуй:

HThread:=CreateThread(nil,0,@ThreadFNC, Pointer(1),0,idThread);


Mystic   (2004-01-05 14:44:00) [14]

function ThreadFNC(Arg: Pointer): Integer; stdcall;


Rimd   (2004-01-05 14:43:00) [15]

какая разница? компилятор говорит что я козел и делаю все неправильно!


panov   (2004-01-05 14:42:00) [16]

>Rimd © (05.01.04 14:41) [2]

function ThreadFNC:boolean; stdcall;


Mystic   (2004-01-05 14:41:00) [17]

1) Вместо CreateThread надо использовать BeginThread
2) Приведи объявление ThreadFNK


Rimd   (2004-01-05 14:41:00) [18]

функция выглядет так function ThreadFNC:boolean;


Наверх

Титульная страница Поиск, карта сайта Написать письмо