|
09.11.2011, 14:48
|
#91
|
Нуждающийся
Регистрация: 31.05.2010
Сообщений: 63
Написано 3 полезных сообщений (для 3 пользователей)
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Сообщение от MoKa
|
Это я тоже читал
Вот такая байда например работать не хочет при билде релиза.
В однопоточном Debug Mod работает. В многопоточном не работает.
Local Image:TImage;
Try
DrawImage(Image, 0, 0, 0) ;
Catch ex:Object
Print ex.ToString()
End Try
|
(Offline)
|
|
10.11.2011, 12:08
|
#92
|
Нуждающийся
Регистрация: 31.05.2010
Сообщений: 63
Написано 3 полезных сообщений (для 3 пользователей)
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
up up up
|
(Offline)
|
|
10.11.2011, 13:27
|
#93
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
ну что тут можно посоветовать.. тебе точно многопоточное необходимо?
*Для справки, ты же вкурсе что разруливать потоки нужно самому да? Простое включение многопоточности не сделает приложение таковым.
__________________
|
(Offline)
|
|
10.11.2011, 14:21
|
#94
|
Нуждающийся
Регистрация: 31.05.2010
Сообщений: 63
Написано 3 полезных сообщений (для 3 пользователей)
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Сообщение от SBJoker
ну что тут можно посоветовать.. тебе точно многопоточное необходимо?
*Для справки, ты же вкурсе что разруливать потоки нужно самому да? Простое включение многопоточности не сделает приложение таковым.
|
Да я в курсе.
У меня есть основной игровой цикл
И задача в фоне которая создает объект для обработки в главном цикле.
Долго объяснять.
Вот всё бы нормально... до тех пор пока главный цикл не обратиться к "недосозданному" в фоне объекту. Или когда главный цикл попытается удалить этот объект
Я даже при создании и удалении блокирую один и тот-же мутекс. Всё равно где-то ошибка.
Теперь мне как обработать попытку в главном цикле и как обработать попытку в фоне?
Ибо ошибка EXCEPTION_ACCESS_VIOLATION
|
(Offline)
|
|
10.11.2011, 14:52
|
#95
|
Нуждающийся
Регистрация: 31.05.2010
Сообщений: 63
Написано 3 полезных сообщений (для 3 пользователей)
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Вот накатал код, относительно по структуре похожий на мой
При длительной симуляции обязательно произойдёт ошибко.
Как обработать это всё попыткой? Так как главный цикл не знает какое действие выполняется прямо сейчас в фоне и наоборот.
Типа получилось удалить - ок, не получилось то просто PRINT чегонибудь Но чтобы прога не останавливалась.
Надеюсь я понятно выражаюсь, и вы сможете мне помочь. Спасибо заранее.
Type TCustomType
Field X:Int;
Field Y:Int;
Field Text:String;
Function Add(X:Int, I:Int, Text:String, Source:String = " ")
Local NewData:TCustomType = New TCustomType;
NewData.X = X;
NewData.Y = Y;
NewData.Text = Text;
ObjList.AddLast(NewData) ;
Print(String(MilliSecs()) + Source + X + " " + Y + Text) ;
End Function
Method Destroy()
ObjList.Remove(Self) ;
X = Null;
Y = Null;
Text = Null;
GCCollect;
End Method
End Type
Function AddOrDestroy:Object(Obj:Object = Null)
Local LObj:TCustomType;
SeedRnd(MilliSecs() / Rand(1, 20)) ;
TCustomType.Add(Rand(1, 200), Rand(1, 200), "t " + String(Rand(1, 200)), " Thread ") ;
Delay(Rand(5, 10)) ;
For LObj = EachIn ObjList
LObj.Destroy() ;
Next
SeedRnd(MilliSecs() / Rand(1, 15)) ;
'Delay(Rand(5, 10)) ;
End Function
Global ObjList:TList = New TList;
Global ObjGenerator:TThread = New TThread;
SeedRnd(MilliSecs()) ;
While Not KeyDown(KEY_ESCAPE)
Local LObj:TCustomType;
Local I:Int;
If Not ObjGenerator.Running() Then ObjGenerator = CreateThread(AddOrDestroy, Null)
For I = 1 To Rand(1, 15)
SeedRnd(MilliSecs() / Rand(1, 20)) ;
TCustomType.Add(Rand(1, 200), Rand(1, 200), "t " + String(Rand(1, 200))) ;
Next
For LObj = EachIn ObjList
LObj.Destroy() ;
Next
For LObj = EachIn ObjList
Print(LObj.X);
Next
Wend
Добавлено:
В этом примере при операциях с листом если вставить LockMutex,UnlockMutex
Всё работает без ошибок. В моём коде - нет. =( Пока не разобрался почему.
Но обработчик попытки мне всё равно нужен
|
(Offline)
|
|
10.11.2011, 16:22
|
#96
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,360
Написано 2,473 полезных сообщений (для 6,856 пользователей)
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
По поводу семпла бегло могу сказать сразу:
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
Тоже вполне работает.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
11.11.2011, 09:20
|
#97
|
Нуждающийся
Регистрация: 31.05.2010
Сообщений: 63
Написано 3 полезных сообщений (для 3 пользователей)
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
2 Randomize
Спасибо за поправку, но не придирайтесь пожалуйста к мелким ошибкам, разумеется в
Function Add(X:Int, I:Int, Text:String, Source:String = " ")
должен быть Y вместо I
While Not KeyDown(KEY_ESCAPE)
Хотел графику сделать, но потом передумал.
Ошибка вызванная операциями в основном и фоновом потоке никак не связана с моими маленькими погрешностями.
Попытка, Исключения указанные тобой при во втором примере работают только в DebugMod и в однопоточном режиме.
За первый спасибо. Работает =)))
Странно, но у меня тоже самое не пахало =)
Вообщем доразобрался. Всем спасибо
|
(Offline)
|
|
11.11.2011, 09:38
|
#98
|
Нуждающийся
Регистрация: 31.05.2010
Сообщений: 63
Написано 3 полезных сообщений (для 3 пользователей)
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Новый вопрос
Целесообразно ли использовать в каждом графическом объекте TLink на Image вместо самого TImage если в системе много объектов с одинаковым изображением?
?
|
(Offline)
|
|
11.11.2011, 20:46
|
#99
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,360
Написано 2,473 полезных сообщений (для 6,856 пользователей)
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Сообщение от Greymem
Новый вопрос
Целесообразно ли использовать в каждом графическом объекте TLink на Image вместо самого TImage если в системе много объектов с одинаковым изображением?
?
|
Нет, не целесообразно. Сам TImage является указателем на загруженное изображение/пиксмапу.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
13.11.2011, 18:49
|
#100
|
Знающий
Регистрация: 22.12.2007
Сообщений: 223
Написано 22 полезных сообщений (для 51 пользователей)
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Где можно скачать новую версию blitzmax ?
|
(Offline)
|
|
13.11.2011, 21:59
|
#101
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
__________________
|
(Offline)
|
|
22.11.2011, 07:44
|
#102
|
Нуждающийся
Регистрация: 31.05.2010
Сообщений: 63
Написано 3 полезных сообщений (для 3 пользователей)
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Подскажите пожалуйста, как вызывать из функции другую функцию, если название второй было передано в первой.
К примеру, как это делает функция CreateThread() ?
Исправьте плиз код, чтобы из функции RunObj можно было вызвать любую другую, которая идет в параметре к данной функции.
Function ObjTest:Object()
Print("Hello") ;
End Function
Function RunObj(ObjName:Object)
?????
End Function
RunObj(ObjTest) ;
__________________
Мозги... у них есть метод "Storm"
|
(Offline)
|
|
22.11.2011, 10:56
|
#103
|
Дэвелопер
Регистрация: 21.11.2009
Адрес: Афула
Сообщений: 1,700
Написано 658 полезных сообщений (для 1,963 пользователей)
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
А ты посмотри как CreateThread() сделан:
Function Create:TThread( entry:Object( data:Object),data:Object )
__________________
kali surgeon
|
(Offline)
|
|
22.11.2011, 12:52
|
#104
|
Нуждающийся
Регистрация: 31.05.2010
Сообщений: 63
Написано 3 полезных сообщений (для 3 пользователей)
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Сообщение от baton4ik
А ты посмотри как CreateThread() сделан:
Function Create:TThread( entry:Object( data:Object),data:Object )
|
Спс, Кэп.
Это я уже посмотрел
Теперь как вызвать этот самый entry ?
__________________
Мозги... у них есть метод "Storm"
|
(Offline)
|
|
22.11.2011, 13:10
|
#105
|
Нуждающийся
Регистрация: 31.05.2010
Сообщений: 63
Написано 3 полезных сообщений (для 3 пользователей)
|
Ответ: Вопрос-Ответ (для новичков BlitzMax)
Сижу, читаю. Неужели всё придется делать через EVENT'ы и HOOK'и ?
__________________
Мозги... у них есть метод "Storm"
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:01.
|