Форум: "Начинающим";
Текущий архив: 2006.09.24;
Скачать: [xml.tar.bz2];
ВнизПараметр для потока Найти похожие ветки
← →
Sam Stone © (2006-09-02 16:38) [0]имеем такой код:
function Q(var p:pointer):dword;
var T:PSomeStruct;//указатель на запись
begin
T:=p;
....
//делаем какую-то работу, юзая Т
end;
procedure TForm1.Button1Click(Sender: TObject);
var T:PSomeStruct;
id:cardinal;
begin
New(T);
T.Field1:=SomeValue;
BeginThread(nil,0,@Q,@T,0,id);
end;
Процедура Button1Click завершается до того как произойдет присваивание T:=p в функции Q и вываливается AV.
Какими методами можно дождаться этого присваивания (объявление глобальной переменной не рассматриваем)? Со Sleep(0) проходит, но корректно ли это?
← →
Loginov Dmitry © (2006-09-02 16:44) [1]> Со Sleep(0) проходит, но корректно ли это?
Не факт.
Жди, когда поток сам сообщит, что данные приняты.
Используй
SetEvent(),
WaitForSingleObject(), и т.п.
← →
Sam Stone © (2006-09-02 16:56) [2]Ясно. Спасибо.
← →
isasa © (2006-09-02 19:18) [3]А продлить время жизни переменной? Например, сделать ее глобальной, или полем формы приложения(TForm1)? И не делать себе трудностей.
← →
DiamondShark © (2006-09-02 20:32) [4]
> ,@T
Собаку убрать.
← →
DiamondShark © (2006-09-02 20:33) [5]
> function Q(var p:pointer):
и var тоже
← →
Sam Stone © (2006-09-02 23:02) [6]
> isasa © (02.09.06 19:18) [3]
</I
> объявление глобальной переменной не рассматриваем
Потому что был интересен момент именно с локальной переменной
А еще лечилось с помощью [5] :)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.09.24;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.046 c