Перейти к содержимому


Фотография

[1.7.10] ComputerCraft [1.74]


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 2863

#2181 Dimus

Dimus

    Странник

  • Пользователи
  • Сообщений: 89

Написал 26.06.2013 - 13:07

Всё гораздо проще.
Запускаем программу command (простите за ассоциации с DOS-ом)
Скрытый текст

После чего файлы с расширением .bat начинают выполняться особым образом, а именно так как я говорил выше.
Программка написана пол часа назад. Если у кого то есть возможность потестировать на глюки, буду благодарен.

#2182 Storm Whisper

Storm Whisper

    Зачарователь

  • Пользователи
  • Сообщений: 1554
  • Откуда: Убежище 13

Написал 26.06.2013 - 13:10

Переделал встроенную функцию? Умно =)

#2183 Apokalypsys

Apokalypsys

    Добытчик дерева

  • Пользователи
  • Сообщений: 183

Написал 27.06.2013 - 11:11

local file=io[paste][/paste]open(cmd,"r")    if not file then      print("No such file")      return false    end    local line=file:read()    while line do      if not shell[paste][/paste]run(line) then        print("[paste][/paste][paste][/paste][paste][/paste]",line)        break      end      line=file:read()    end    file:close()
for line in io[paste][/paste]lines(cmd) do     if not shell[paste][/paste]run(line) then         error("Error in execution line", 2)     endend
Вообще-то бред

#2184 Dimus

Dimus

    Странник

  • Пользователи
  • Сообщений: 89

Написал 27.06.2013 - 11:53

io.line(cmd)

Это что за функция?

#2185 Apokalypsys

Apokalypsys

    Добытчик дерева

  • Пользователи
  • Сообщений: 183

Написал 27.06.2013 - 12:00

Опечатался. io.lines. Функция открывает файл и возвращает итератор. При каждом следующем вызове читает строку, после последней строки зарывает файл. Тоесть:
it = io[paste][/paste]lines(file)print(it())print(it())print(it())
>первая строка >вторая строка >третья строка

#2186 Dimus

Dimus

    Странник

  • Пользователи
  • Сообщений: 89

Написал 27.06.2013 - 12:04

http://www.computerc...o/wiki/IO_(API)

io.lines: Doesn't exist.



#2187 Apokalypsys

Apokalypsys

    Добытчик дерева

  • Пользователи
  • Сообщений: 183

Написал 27.06.2013 - 16:04

Ну и ну... даже не знаю что делать.
function io[paste][/paste]lines(_file)	local __file, _file = io[paste][/paste]open(_file), nil	return coroutine[paste][/paste]wrap(		function()			repeat				local _s = __file:read()				coroutine[paste][/paste]yield(_s)			until _s == nil			__file:close()		end	)end
Если в конце добавить
for line in io[paste][/paste]lines(os[paste][/paste]getRunningProgram()) do    print(line)end
, получится

#2188 Xytabich

Xytabich

    Странник

  • Пользователи
  • Сообщений: 54
  • Откуда: Россия

Написал 28.06.2013 - 08:59

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

#2189 Dimus

Dimus

    Странник

  • Пользователи
  • Сообщений: 89

Написал 28.06.2013 - 09:08

А зачем local __file, _file = io.open(_file), nil ?
Почему не local __file = io.open(_file) ?

#2190 Dimus

Dimus

    Странник

  • Пользователи
  • Сообщений: 89

Написал 28.06.2013 - 09:16

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

Похоже обычный sleep тормозит только вызывающую его функцию. Вот пример:
function A()  print('Begin of A')  sleep(10)  print('End of A')endfunction B()  for i=1,10 do    print('B is working')    sleep(1)  endendparallel[paste][/paste]waitForAll(A,B)


#2191 Xytabich

Xytabich

    Странник

  • Пользователи
  • Сообщений: 54
  • Откуда: Россия

Написал 28.06.2013 - 09:31

Похоже обычный sleep тормозит только вызывающую его функцию.

Нет, я пробовал sleep, он тормозит всю программу.

#2192 Storm Whisper

Storm Whisper

    Зачарователь

  • Пользователи
  • Сообщений: 1554
  • Откуда: Убежище 13

Написал 28.06.2013 - 10:10

Ну парень же проверил. Ты сам как его используешь? Дай код. Вообще всегда надо прикреплять код, если ждёшь помощи.

#2193 Apokalypsys

Apokalypsys

    Добытчик дерева

  • Пользователи
  • Сообщений: 183

Написал 28.06.2013 - 10:20

А зачем local __file, _file = io.open(_file), nil ? Почему не local __file = io.open(_file) ?

Просто удалил переменную. Никто в коде ошибки не заметил
io[paste][/paste]open(_file)
должно быть
io[paste][/paste]open(_file, "r")
Самое интересное - всё работает.

#2194 Dimus

Dimus

    Странник

  • Пользователи
  • Сообщений: 89

Написал 28.06.2013 - 12:57

sleep, он тормозит всю программу.

Если программа ожидает завершения функции, то разумеется, sleep внутри функции затормозит и программу. При параллельном выполнении такого быть не должно.

#2195 Xytabich

Xytabich

    Странник

  • Пользователи
  • Сообщений: 54
  • Откуда: Россия

Написал 28.06.2013 - 21:24

Вот код:
local function a()        sleep(5)	shell[paste][/paste]run("file")  endendlocal function b()  event, m = os[paste][/paste]pullEvent("key")    mp=30    if m==mp then 	shell[paste][/paste]run("file")  endendwhile true do  parallel[paste][/paste]waitForAll(a, b)end


#2196 Apokalypsys

Apokalypsys

    Добытчик дерева

  • Пользователи
  • Сообщений: 183

Написал 29.06.2013 - 01:30

У меня норм работает. Я бы сделал так
local _time = os[paste][/paste]startTimer(5)repeat     local event, p1 = os[paste][/paste]pullEvent()until (event == "key" and p1 == 30) or (event == "timer" and p1 == _timer)shell[paste][/paste]run("file")


#2197 Xytabich

Xytabich

    Странник

  • Пользователи
  • Сообщений: 54
  • Откуда: Россия

Написал 29.06.2013 - 17:41

У меня норм работает. Я бы сделал так

local _time = os[paste][/paste]startTimer(5)repeat     local event, p1 = os[paste][/paste]pullEvent()until (event == "key" and p1 == 30) or (event == "timer" and p1 == _timer)shell[paste][/paste]run("file")

Не работает, просто завис комп...

#2198 Apokalypsys

Apokalypsys

    Добытчик дерева

  • Пользователи
  • Сообщений: 183

Написал 29.06.2013 - 18:31

Опечатался
p1 == _timer

#2199 Xytabich

Xytabich

    Странник

  • Пользователи
  • Сообщений: 54
  • Откуда: Россия

Написал 29.06.2013 - 18:41

Теперь работает, но есть одна "маленькая" проблема, там 2 разные программы запускаются, после отсчёта одна, а после нажатия клавиши другая.

#2200 Apokalypsys

Apokalypsys

    Добытчик дерева

  • Пользователи
  • Сообщений: 183

Написал 29.06.2013 - 19:18

Жжешь! Проблема...
local _time = os[paste][/paste]startTimer(5)local filewhile true do	local e, p1 = os[paste][/paste]pullEvent()	if e == "key" and p1 == 30 then		file = "file1"                break	elseif e == "timer" and p1 == _time then		file = "file2"                break	endendshell[paste][/paste]run(file)



Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных