По поводу семпла бегло могу сказать сразу:
Function Add(X:Int, I:Int, Text:String, Source:String = " ")
Local NewData:TCustomType = New TCustomType;
NewData.X = X;
NewData.Y = Y;
Параметр I в конструкторе ошибочен - внутри конструктора Y остаётся вновь созданной нетронутой переменной с нулём.
While Not KeyDown(KEY_ESCAPE)
Local LObj:TCustomType;
Local I:Int;
Опрашивать клавиатуру нечем. Окна то нет.
Method Destroy()
ObjList.Remove(Self) ;
X = Null;
Y = Null;
Text = Null;
GCCollect;
End Method
Я понимаю стремление всё контролировать, но обнулять переменные не надо. Это сделает Garbage collector сам. Всё кроме ObjList.Remove(Self) и GCCollect можно убрать из деструктора.
Написал семпл:
SuperStrict
Framework brl.basic
Import brl.glmax2d
Import brl.random
Import brl.threads
Type TTest
Field x:Float, y:Float, z:Float
EndType
Function MySexyThread:Object(obj:Object)
Local tst:TTest
Try
tst.x = 7
tst.y = 8
Catch e:Object
Print "Gotcha! " + e.ToString()
EndTry
EndFunction
Global SexyThread:TThread = New TThread
SeedRnd(MilliSecs())
Local endtime:Int = MilliSecs() + (1000 * 60)
While (MilliSecs() < endtime)
If Not SexyThread.Running() Then SexyThread = CreateThread(MySexyThread, Null)
Delay(1)
Wend
Работает как положено. На протяжении минуты плюёт экскепты.
Твой код с указанными выше правками тоже работает.
SuperStrict
Framework brl.basic
Import brl.glmax2d
Import brl.random
Import brl.threads
Local img:TImage
Try
DrawImage(img, 10, 10)
Catch e:Object
Print "Wft? " + e.ToString()
End Try
Тоже вполне работает.