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

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

CreateThread [D5]


Ольга ©   (2002-11-12 12:43:00) 

Народ помогите!
Как использовать CreateThread?
Как объявить и написать функцию потока?
Плиз.


Polevi   (2002-11-13 14:27:00) [1]

Pointer(1234)


Ольга   (2002-11-13 14:06:00) [2]

А кто нить в курсе что за тип такой Pointer?
А если я в функцию хочу передать параметр другого типа?
Скажем интеджер?


Polevi   (2002-11-12 18:25:00) [3]

program Project1;
{$APPTYPE CONSOLE}
uses SysUtils, Windows,stdctrls;

//ф-ия потока
function ThreadProc(lpParameter:Pointer):DWORD;stdcall;
var
i:integer;
begin
for i:=1 to 5 do
begin
Writeln(IntToStr(i));
sleep(500);
end;
Writeln("Vishel zaichik pogulat.");
//сдесь поток завершается
end;

var
h:THandle; //хендл потока
id:DWORD; //id потока
begin
//Создаем поток и сразу запускаем его
h:=CreateThread(nil,0,@ThreadProc,nil,0,id);
//ждем завершения потока
WaitForSingleObject(h,INFINITE);
Readln;
end.


Ольга   (2002-11-12 17:17:00) [4]

Всем спасибки! Неожидала стольких ответов :-)
Что касается знаний, их маловато.
Почему именно WinApi? Потому что лабы такие и разобраться в них хотся.
А конкретно немогу разобраться в объявлении с типами запуталась.
Вот так вот. :-)
Еще раз народу спасибки!


ZZ   (2002-11-12 16:10:00) [5]

Что-то вроде этого

function func(dwParam : Cardinal):Cardinal;stdcall;
begin
//...
end;


CreateThread(nil,0,@func,Param,0,ThID);


Digitman   (2002-11-12 15:30:00) [6]

>Игорь Шевченко

Во, прикинул - тоже не короток кажись)))))
Ото ж щас тоже меряться полезу))))))))

И все дружно в "Потрепаться" поедем))))
С песнями и плясками))))) Продолжать меряться)))))))))))


Игорь Шевченко   (2002-11-12 15:12:00) [7]

Digitman © (12.11.02 14:49)

Ото ж :-)

Polevi © (12.11.02 15:06)

:-)


Polevi   (2002-11-12 15:06:00) [8]

2Игорь Шевченко © (12.11.02 14:45)
простите учитель, я больше не буду :-)))


Digitman   (2002-11-12 14:49:00) [9]

Ну-у-у-у !)

Понеслаааась)..

Как только клоун какой-то барышней представился, сразу мужики напоказ меряться начали - у кого длинней))))


Игорь Шевченко   (2002-11-12 14:45:00) [10]

Polevi © (12.11.02 12:58)
class CThread
{
public:
HANDLE Handle;
DWORD ThreadID;
BOOL Terminated;


Раз уж вы меня учите, то осмелюсь напомнить, что сайт называется "Мастера Delphi" :-)


Polevi   (2002-11-12 14:30:00) [11]

PS
Polevi © (12.11.02 13:12) - это всего лишь напоминание о названии раздела форума, если вы не поняли


Polevi   (2002-11-12 14:28:00) [12]

из данного вопроса довольно сложно судить об уровне знаний вопрошающего, вопрос был вполне конкретный


Игорь Шевченко   (2002-11-12 14:21:00) [13]

Polevi © (12.11.02 13:12)

WinApi подразумевает, уважаемый, наличие определенных знаний, в том числе и про потоки. Судя по уровню знаний автора, лучше использовать TThread.


Evgeny V   (2002-11-12 13:13:00) [14]

Ольга, встречный вопрос, обязательно создавать через API ? Почему не использовать дельфийский класс TThread (создать свой потомок )? В helpe про него написано хорошо, и примеры кое-какие есть.


Polevi   (2002-11-12 13:12:00) [15]

WinApi


Игорь Шевченко   (2002-11-12 13:00:00) [16]

Ольга (12.11.02 12:43)

Создать наследника от TThread проще всего

uses Classes;


Polevi   (2002-11-12 12:58:00) [17]

class CThread
{
public:
HANDLE Handle;
DWORD ThreadID;
BOOL Terminated;

CThread(BOOL suspended)
{
Terminated=false;
if (suspended)
Handle=CreateThread(NULL, 0, ThreadProc, this, CREATE_SUSPENDED, &ThreadID);
else
Handle=CreateThread(NULL, 0, ThreadProc, this, 0, &ThreadID);
}

virtual DWORD Execute()=0;

void Resume()
{
ResumeThread(Handle);
}
};


DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
return ((CThread *)lpParameter)->Execute();
}


Наверх

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