Перейти к публикации
Форум - ComputerCraft
qwertyMAN

Многопоточность. Или как запустить несколько прог на один комп.

Рекомендованные сообщения

Всем добрый день.

 

Уже давно хотел предложить создание следующих крутых прог.

Я хочу предложить писать программы, представляющие из себя некоторую функцию, которая прописывается в event.listen() и завершается. Выходит что комп по сути свободен, а прога осталась в фоне. А в идеале она ещё закрепляется за другим монитором и клавиатурой освобождая основной монитор и клавиатуру.

 

Таким образом мы можем на первом (основном) мониторе дальше писать проги, или ещё что то запускать и параллельно с этим на втором мониторе у нас будет работать прога на эвентах.

Вот пример прог на эвентах, которые теоретически при небольших изменениях в коде способны запускаться параллельно с работой основного компа:

 

В чём суть?

 

Эти программы прописываются в эвентах и тупо занимают время компа бесконечным циклом с задержкой

Часть кода из проги для прослушки чата:

function start()
    term.clear()
    event.listen("chat_command",cmd)
    event.listen("chat_message",msg)
    while exit do
        os.sleep(3)                    -- просто прожигаем время в пустую, вместо того чтобы работать параллельно с компом.
    end
    event.ignore("chat_command",cmd)
    event.ignore("chat_message",msg)
end
start()

Как мы видим мы просто загрузили эвенты и ждём время когда игрок захочет их отрубить (причём отрубает он их с помощью тех же эвентов). То есть теоретически если не задавать цикл - можно параллельно запускать кучи прог, надо лишь распределить под каждую из них свой монитор и параллельный запуск обеспечен.

 

Что об этом думаете пишите в комментах.

Изменено пользователем qwertyMAN

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Где многопоточность? Может я плохо вижу, к окулисту пора сходить? :blink:

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ты же понимаешь, что event.listen не создаёт новый поток?
OpenOSь всё время слушает ивенты, внутри /lib/event.lua есть специальная таблица listeners, каждый происходящий ивент она сравнивает со значениями в таблице, и запускает определённую функцию. Хочешь многопоточности - используй thread Зер0

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Где многопоточность? Может я плохо вижу, к окулисту пора сходить? :blink:

Ну так эмуляция же. Я и не утверждаю что многопоточность есть. Зато неплохая альтернатива.

Изменено пользователем qwertyMAN

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну так эмуляция же.

 

Эта "эмуляция" ни капли не похожа на многопоточность. :/

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Добро пожаловать на форум:

 

 

55.jpg

 

 

 

Даже порекламировать свои проги нельзя, сразу тапком кинут.

 

Если ты это прочитал, значит ты читер.

Изменено пользователем qwertyMAN
  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ето скорее похоже на костыльную работу в фоне чем на многопоточность

 

многопоточность - одна программа делится на много кусков (например через coroutine)

многозадачность - много программ запущеных одновременно (например через process api)

Изменено пользователем Larban

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ето скорее похоже на костыльную работу в фоне чем на многопоточность

 

многопоточность - одна программа делится на много кусков (например через coroutine)

многозадачность - много программ запущеных одновременно (например через process api)

Так и есть, многопоточность для бедных :) Хотя даже и до такого титула не дотягивает. Ибо вызывает все функции по очереди из таблицы на полученный сигнал, так что если один заглохнет, умрёт всё.

 

Это, а еще есть точки и запятые.

Ты и сам-то не шибко грамотный, если честно. Главное, что не вырвиглазно писано.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

....

Ты и сам-то не шибко грамотный, если честно. Главное, что не вырвиглазно писано.

Мы здесь все коряво пишем, русский вообще не родной мне язык. Я еще хорошо пишу, а другие в моей местности, страх и ужас. сечас. :D

Изменено пользователем NEO

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

если хочется многозадачность (термин высокоуровневый, по факту потоки), стоит изменять ось, ну а самая боль - в автоматических прерываниях. приходится слипы вручную ставить

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Добро пожаловать на форум:

 

 

55.jpg

 

 

 

Даже порекламировать свои проги нельзя, сразу тапком кинут.

 

Если ты это прочитал, значит ты читер.

"Даже порекламировать свои проги нельзя, сразу тапком кинут.

 

 Если ты это прочитал, значит ты читер."

 

 

я это прочитал и я не читер

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×