Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.47 MB
Время: 0.011 c
3-85855
jen_bond
2002-12-07 09:54
2002.12.26
Округление


1-85916
SONY
2002-12-15 07:27
2002.12.26
Как получить имя пользователя, работающего на удаленном компьютер


14-86112
Дядя Вел
2002-12-03 18:40
2002.12.26
Wake UP on LAN


1-85910
Сыр
2002-12-17 04:04
2002.12.26
Помогите сделать BEEP в винде 2000?


3-85831
Fishka
2002-12-06 14:52
2002.12.26
DBCtrlGrid - добавление пустой записи?