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