![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Такой вот вопрос [D5]
Nick-From © (2002-11-09 21:38:00)Есть тело потока:
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^;
Вроде ведь параметры передаю правильно.
В чем проблема, может кто знает?
paul_shmakov (2002-11-12 13:34:00) [1]2 BSD:
нет, не так.
SubThread := CreateThread(...);
// ResumeThread(SubThread) если использовался флаг CREATE_SUSPENDED
WaitForSingleObject(SubThread, INFINITE);
GetExitCodeThread(SubThread, @IntNumber);
CloseHandle(SubThread);
BSD (2002-11-11 14:36:00) [2]После создания и запуска :
IntNumber:=WaitForSingleObject(SubThread,INFINITE);
Nick-From (2002-11-10 01:27:00) [3]Спасибо, заработало :)
А как взять возвращаемый параметр:
IntNumber := ResumeThread(SubThread); ???
Ihor Osov'yak (2002-11-09 22:28:00) [4]function Execute (param: TMyPtr):Dword; stdcall;
Еще две некритические ошибки: нет освобождения памяти и не проверки на успешность getmem;