Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.21;
Скачать: CL | DM;

Вниз

Такой вот вопрос   Найти похожие ветки 

 
Nick-From ©   (2002-11-09 21:37) [0]

Есть тело потока:

function Execute (param: TMyPtr):Dword;
var
r: integer;
begin
r := param^;
if r > 0 then Result := 1
else Result :=0;
end;

,где TMyPtr = ^integer;

и есть процедура, вызывающая поток:

procedure TForm1.Button1Click(Sender: TObject);
var
SubThread, SubThreadID: THandle;
param: ^integer;
begin
Getmem(param, 4);
param^ := StrToInt(Edit1.text);


SubThread := CreateThread ( nil,
0,
@Execute,
param,
CREATE_SUSPENDED,
SubThreadID
);
ResumeThread(SubThread);
end;

в процессе выполнения которой возникает ACCESS VIOLATION на строке r := param^;

Вроде ведь параметры передаю правильно.
В чем проблема, может кто знает?


 
Ученик ©   (2002-11-09 21:50) [1]

function Execute (param: TMyPtr):Dword; stdcall;


 
Nick-From ©   (2002-11-10 01:27) [2]

Спасибо, заработало :)

А как взять возвращаемый параметр:
IntNumber := ResumeThread(SubThread); ???


 
Ученик ©   (2002-11-10 08:47) [3]

The GetExitCodeThread function retrieves the termination status of the specified thread.

BOOL GetExitCodeThread(
HANDLE hThread, // handle to the thread
LPDWORD lpExitCode // termination status
);


 
Nick-From ©   (2002-11-10 12:22) [4]

Изменяем текст программы:

function Execute (param: TMyPtr):Dword; stdcall;
var
r:integer;
res: DWord;
begin
r := param^;
if r > 0 then Res := 1
else Res :=0;
ExitThread(res);
end;


procedure TForm1.Button1Click(Sender: TObject);
var
SubThread, SubThreadID: THandle;
param: ^integer;
res: dword;
begin
Getmem(param, 4);
param^ := StrToInt(Edit1.text);


SubThread := CreateThread ( nil,
0,
@Execute,
param,
CREATE_SUSPENDED,
SubThreadID
);

res:=0;
ResumeThread(SubThread);
GetExitCodeThread(SubThread, res);
edit2.Text := IntToStr(integer(res)) ;
end;


Но почему-то при любых раскладах он возыращает 259, что-то не так?


 
Ученик ©   (2002-11-10 12:32) [5]

Суть в этом, реализация в зависимости от задачи

repeat
Sleep(0);
GetExitCodeThread(SubThread, res);
until res <> STILL_ACTIVE;
edit2.Text := IntToStr(integer(res)) ;



 
Nick-From ©   (2002-11-10 19:54) [6]

Ну да, GetExitCodeThread возвращает мне STILL_ACTIVE так как:
"...If the specified thread has not terminated, the termination status returned is STILL_ACTIVE...",
а как же получить мои 1 или 0 из функции потока?

Пишут:
"...If the thread has terminated, the termination status returned may be one of the following:

· The exit value specified in the ExitThread or TerminateThread function.
· The return value from the thread function.
· The exit value of the thread"s process.

Как я понял, мне нужен второй пункт, так что же, для этого нужно писать: TerminateThread(SubThread, DWparam) ,где DWparam: DWord и есть 1 или 0 ???
Чего скажешь?



 
Fantasist ©   (2002-11-10 21:56) [7]


ResumeThread(SubThread);
WaitForSingleObject(SubThread);
GetExitCodeThread(SubThread, res);


 
Ученик ©   (2002-11-10 21:59) [8]

>Nick-From © (10.11.02 19:54)
Ученик © (10.11.02 12:32)
Это все что нужно добавить, чтобы получить требуемый результат, хотя и непонятно, зачем тут Thread

А почему бы не использовать стандартные классы для работы с Thread из Classes - TThread ?


 
Nick-From ©   (2002-11-11 19:18) [9]

УРА, ЭТО СВЕРШИЛОСЬ !!!!!!!!!!!!!!!!
Я наконец-таки сделал эту прогу :)
Всем, кто помогал, ОГРОМНОЕ спасибо !!!
Special thanks to Ученик & Fantasist (Вряд ли что-нибудь написал бы без вашей помощи).
Не знаю, как и отблагодарить вас, могу выслать получившуюся прогу по мылу: "Программа рекурсивного нахождения определителя матрицы с использованием потоков (API) и указателей". Страшно звучит, правда :))

2Ученик
>Это все что нужно добавить, чтобы получить требуемый
>результат, хотя и непонятно, зачем тут Thread
>А почему бы не использовать стандартные классы для работы с >Thread из Classes - TThread ?

Такое вот задание - написать программу рекурсивного нахождения определителя матрицы с использованием потоков (API). Чтобы каждый шаг рекурсии просчитывался в своём потоке.
Спасибо!



Страницы: 1 вся ветка

Текущий архив: 2002.11.21;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
14-69568
_cooler
2002-11-04 14:45
2002.11.21
Помогите мастера!


14-69571
VDen
2002-11-04 19:24
2002.11.21
Любимый СофтАйс


3-69148
Jony
2002-10-30 20:57
2002.11.21
Как передать несколько параметров в запросе следующей конструкции


14-69520
Malder
2002-10-31 15:29
2002.11.21
Посоветуйте хороший HEX редактор


8-69452
kavlad
2002-07-29 18:10
2002.11.21
BMP по 100 мегов