LINUXTALKS.CO

В Gambas появилась многопоточность.

 

L


0

1

Наконец то!

Судя по тому что написано, теперь можно создать класс родителем которого будет класс task. Создать экземпляр класса и передать параметры в свойства экземпляра класса. Затем вызвать wait() что бы функция main() экземпляра класса запустилась.

Отслеживать выполнение задачи можно через свойства Handle и Running. А так же события Error, Kill и Read. Забрать результат через значение Value типа Variant (произвольный тип данных).

Ещё есть методы Kill, Stop и Wait. Последний судя по описанию позволяет основному потоку подождать завершения выполнения дополнительного.

Sub Wait ( [ Timeout As Float ] )

Яж два года ждал пока это завезут в gambas, теперь буду столько же ждать пока завезут в debian.

>>> Подробности

★★★★★★

Проверено: Zadoff386 ()

Это бейсик что ли? Зачем оно нужно?

alexferman    
★★★★★
Linux / Firefox
Ответ на: комментарий от crypt

Я как-то в детстве писал на вижуал бейсике 6.0

Интернет даже что-то помнит.

https://web.archive.org/web/20041015230219/http://systemhalt.nm.ru/pscaner.html

https://web.archive.org/web/20041023152755/http://systemhalt.nm.ru/hyperchat.html

https://web.archive.org/web/20041201160934/http://systemhalt.nm.ru/crypt.html

metalbeaver    
★★★★★★
Windows / Chrome
Ответ на: комментарий от xwicked

Работает на Windows 2000
Херасе, ты какой старый…

Это разве старый.
А как же MS-DOS, Windows 3.x и ZX-Spectrum =))

Minona    
★★★★★
Windows / Yandex
Ответ на: комментарий от Minona

Это разве старый.

В 2000 мне было 11, я в прятки вечером во дворе играл, а он уже проги писал. Старый не относительно MS-DOS, а относительно меня.

xwicked    
★★★★★
Linux / Firefox

Голубые ели раком.

deep-purple    
★★★★★★★★★★
Android / Firefox
Ответ на: комментарий от xwicked

В 2000 мне было 11, я в прятки вечером во дворе играл, а он уже проги писал. Старый не относительно MS-DOS, а относительно меня.

Ты удивишься, но были люди которые в год твоего рождения уже были в профессии. До пряток оставалось долгих 11 лет…

:)

VIT    

Linux / Chrome

Не, а если серьёзно, зачем делать из gambas, ruby, python, php и других языков C++?

Почему не выкинуть негодное поделие? Зачем php работа с БД, зачем потери скорости, зачем скриптовым языкам многопоточность?

Разделяй и властвуй… :( Не пишите на php!

Пишите сразу на C++ бд и остальное, на php оставляйте только веб-морду, если вам так хочется.

xwicked    
★★★★★
Последнее исправление: xwicked (всего исправлений: 1)

Linux / Firefox
Ответ на: комментарий от xwicked

А вот щас смузихлёбы захлебнулись своими смузями!

deep-purple    
★★★★★★★★★★
Android / Firefox
Ответ на: комментарий от xwicked

Не, а если серьёзно, зачем делать из gambas, ruby, python, php и других языков C++?

Это вопрос привычек. А ещё вопрос традиций разработки. Например в gambas есть техническая возможность дёргать прямое выделение памяти и трахаться с указателями. Но практически никто это не делает. А если и делают, то для очень специфических задач, в пределах отдельных классов. В C++, как я понял цыганские фокусы с памятью и указателями происходят постоянно и это нормальная практика программирования. Иначе не создавали бы rust.

зачем скриптовым языкам многопоточность?

Ну вот например, что бы в течении игрового тика, на одном ядре считалось температурное распределение, на другом поиск пути персонажем, если персонажей много, то можно между множеством ядер распределить их процесс поиска пути. А ещё при одновременной игре на нескольких «картах», для каждой тоже можно отдельный процесс назначить.

Я когда изучал тему оптимизации производительности в игре RimWorld, то понял что даже обычный верстак, каждый игровой тик проверяет все объекты на карте в поисках ресурсов для активного задания. Каждое «рабочее место», так делает похоже каждый тик. А как животноводство уничтожает производительность… Когда каждый верблюд каждый ход решает куда бы пойти, и не пора ли подкрепится. А ещё механоид будучи без дела, каждый тик проверяет где бы поработать.

Скачал мод на многопоточность, но с ним прочие моды начинают глючить.

rezedent12    
★★★★★★
Windows / Firefox
Ответ на: комментарий от rezedent12

Ну вот например, что бы в течении игрового тика,

У меня уже вопрос, зачем писать игру на rust’е, чтобы возникла необходимость в многопоточности? Ты не понял, это ровно как изобрести велосипед и начинать его модернизировать в мотоцикл. Понял? И все велосипеды стали мотоциклами. Если Rust, крут, как скриптовый язык, то пусть таким и остаётся. А игры нужно делать на С++, так как там всё уже есть.

xwicked    
★★★★★
Последнее исправление: xwicked (всего исправлений: 2)

Linux / Firefox
Ответ на: комментарий от xwicked

Какой скриптовый язык, что за дичь?

alexferman    
★★★★★
Android / Chrome
Ответ на: комментарий от rezedent12

В C++, как я понял цыганские фокусы с памятью и указателями происходят постоянно и это нормальная практика программирования

А ты не делай цыганские фокусы и вообще старайся использовать ссылки и умные указатели, ничего сложного

alexferman    
★★★★★
Android / Chrome
Ответ на: комментарий от alexferman

А ты не делай цыганские фокусы и вообще старайся использовать ссылки и умные указатели, ничего сложного

Пока что то целиком делаю я один - да. Но когда нужно брать код сделанный другими, когда нужно работать в команде…

rezedent12    
★★★★★★
Windows / Firefox
Ответ на: комментарий от xwicked

У меня уже вопрос, зачем писать игру на rust’е, чтобы возникла необходимость в многопоточности?

Rust - это компилируемый язык достаточно низкого уровня и с безопасной работой с памятью.

Но сам твой вопрос не корректный. Необходимость в многопоточности возникает из за нехватки одноядерной производительности

rezedent12    
★★★★★★
Windows / Firefox
Ответ на: комментарий от alexferman

А ты не делай цыганские фокусы и вообще старайся использовать ссылки и умные указатели, ничего сложного

И массивы тоже не использовать?

ThePlayerZero    
★★
Android / Chrome
Ответ на: комментарий от alexferman

std::vector<T>::operator[] небезопасная операция, потому что под капотом это всё ещё «цыганский фокус с памятью». Даже санитайзер, как ни странно, тут далеко не всегда поможет, только в простых случаях.

Есть безопасный метод std::vector<T>::at с проверкой границ, но им на практике никто не пользуется, так как нафиг надо

ThePlayerZero    
★★
Android / Chrome
Ответ на: комментарий от rezedent12

Что будет, если в Gambas попытаться записать данные по индексу 20 в массиве, который объявлен на 10 элементов?

ThePlayerZero    
★★
Android / Chrome
Ответ на: комментарий от rezedent12

Rust - это компилируемый язык достаточно низкого уровня и с безопасной работой с памятью.

Я rust с ruby перепутал. 😁 Но это сути дела не меняет.

xwicked    
★★★★★
Linux / Firefox
Ответ на: комментарий от ThePlayerZero

Что будет, если в Gambas попытаться записать данные по индексу 20 в массиве, который объявлен на 10 элементов?

Ошибка. На всех стандартных классах массива. Но ты конечно можешь написать свой класс внутри которого устроить цыганские фокусы используя специальные функции для работы с прямым выделением памяти и указателями.

rezedent12    
★★★★★★
Windows / Firefox
Ответ на: комментарий от alexferman

Смотря что там за функция на второй строчке

Правильно, потому что никаких массивов на самом деле нет, есть просто память, которую мы вот в данный момент решили прочитать как последовательность int-ов. Индекс в [] это просто смещение относительно какого-то указателя в конкретных попугаях (в штуках). Цыганство состоит и в том, что указателя на память можно тасовать как угодно, менять типы с int на любой другой и читать ту же память но уже в другом контексте.

Насчёт моего примера с отрицательными индексами – да, они будут работать, если сдвинуть начальный поинтер скажем в середину выделенного участка под массив.

ThePlayerZero    
★★
Windows / Chrome
Ответ на: комментарий от ThePlayerZero

Насчёт моего примера с отрицательными индексами – да, они будут работать, если сдвинуть начальный поинтер скажем в середину выделенного участка под массив.

При помощи этого реализовав массив с произвольным диапазоном индексов. Воистину цыганский фокус. На языке более высокого уровня, для этого пишется класс-обёртка который выполняет прибавление смещения при каждом обращении.

Вспомнил. Как то писал сериализатор для множества вложенных классов, сделав для каждого из них метод загрузки. В который передавался по ссылке строковый массив и опционально номера начальной строки с конечной.

rezedent12    
★★★★★★
Windows / Firefox
Ограничение на отправку комментариев: только для зарегистрированных пользователей, score>=90