Author Topic: Потоки  (Read 87861 times)

0 Members and 1 Guest are viewing this topic.

i0

  • Оплот сообщества
  • ****
  • Posts: 353
  • CMann 4.13.014 final, ie, presto, win7 x86, x64
    • View Profile
Re: Потоки
« Reply #90 on: February 08, 2016, 10:32:15 AM »
мне проще в мелких потоках обходить эти переменные стороной, чем в основном потоке с десятками ифпикчаинов сохранять переменные каждый раз

+не на 100% уверен, что два события не могут совпасть.

Victor

  • Зашел в гости
  • *
  • Posts: 14
    • View Profile
Re: Потоки
« Reply #91 on: April 16, 2016, 07:55:18 PM »
Доброго времени суток, подскажите пожалуйста как в данный скрипт
IF($time1 < $_time_t)
   // условие сработает снова через 3часа 20 сек
   // 1й процес время исполнения кода 30сек
   $time1 = $_time_t + 10820
END_IF
 
IF($time2 < $_time_t)
   // условие сработает снова через 1 час 20 мин
   // 2й процес время исполнения кода 540сек
   // с "до 2ч 10мин" сложнее. Нужно вставить проверку завершилось ли задание, если нет то выставить ожидание в несколько секунд а не часов.
   $time2 = $_time_t + 4800
END_IF
 
IF($time3 < $_time_t)
   // условие сработает снова через 1 час 30 мин
   // 3й процес время исполнения кода 60сек
   $time3 = $_time_t + 5400
END_IF
 
WAITMS(50)


в одно из "IF" вставлять, по истечении времени ожидания, на выполнение новый файл(.cms)
имеется 10 скриптов, (1, 2, 3, 4, 5, 6, 7, 8, 9,10 -.cms)
нашел #include, но не пойму он вес скрипт на себя заменит или только то что между IF и END_IF.
и не пойму как сделать чтобы каждый новый раз он новый файл грузил.
Подскажите пожалуйста.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Потоки
« Reply #92 on: April 17, 2016, 10:55:52 AM »
За место #include "1.cms" будет вставлено то что находится в файле 1.cms
Code: (clickermann) [Select]
IF($time1 < $_time_t)
   INC($n,1)
   SWITCH($n)
   CASE(1)
      #include "1.cms"
   CASE(2)
      #include "2.cms"
   CASE(3)
      #include "3.cms"
   CASE(4)
      #include "4.cms"
   CASE(5)
      #include "5.cms"
   CASE(6)
      #include "6.cms"
   CASE(7)
      #include "7.cms"
   CASE(8)
      #include "8.cms"
   CASE(9)
      #include "9.cms"
   CASE(10)
      #include "10.cms"
   DEFAULT
   END_SWITCH
   IF($n = 10)
      $n = 0
   END_IF
   $time1 = $_time_t + 10820
END_IF

Victor

  • Зашел в гости
  • *
  • Posts: 14
    • View Profile
Re: Потоки
« Reply #93 on: April 17, 2016, 10:17:34 PM »
 ::)Спасибо.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Потоки
« Reply #94 on: April 18, 2016, 10:02:39 AM »
Только так лучше не привыкай.
 Если в подключаемом модуле будет подпрограмма или поток, так делать нельзя.


dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Потоки
« Reply #95 on: April 18, 2016, 09:37:04 PM »
Только так лучше не привыкай.
 Если в подключаемом модуле будет подпрограмма или поток, так делать нельзя.
насчет потоков ладно, но что с подпрограммами в #include не так? пользуюсь сабами в инклудах, вроде проблем небыло  :-\

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Потоки
« Reply #96 on: April 18, 2016, 09:45:37 PM »
Только так лучше не привыкай.
 Если в подключаемом модуле будет подпрограмма или поток, так делать нельзя.
насчет потоков ладно, но что с подпрограммами в #include не так? пользуюсь сабами в инклудах, вроде проблем небыло  :-\

Не так будет при типичном нубском использовании #include. Скажем одно и тоже вставляется несколько раз, а там и ГОТО с метками и возможно подпрограммы. Такое нельзя дублировать!

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


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Потоки
« Reply #97 on: April 19, 2016, 08:58:42 AM »
насчет потоков ладно, но что с подпрограммами в #include не так? пользуюсь сабами в инклудах, вроде проблем небыло  :-\
Конечно работают, для этого они и предназначены.
Но вот здесь уже работать не будут
Code: (clickermann) [Select]
SUB(name1)
   #include "mylib.cms"
END_SUB
Если в mylib.cms есть подпрограммы или потоки. Потому что include закопан в тело другой подпрограммы, что делать нельзя. Правильно делать так
Code: (clickermann) [Select]
#include "mylib.cms"
SUB(name1)
   name2() // вызов ПП из mylib.cms
END_SUB
Все инклюды в корне скрипта.


Victor

  • Зашел в гости
  • *
  • Posts: 14
    • View Profile
Re: Потоки
« Reply #98 on: August 04, 2016, 01:48:05 PM »
Всем добрый день. ;)
Появился новый вопрос. ;)

Возможно ли  $time2 = $_time_t + 120 указать ему не +120 а время которое в include пропиисано как время простоя.
Ну и естественно там его описать так чтобы оно не влияло на временной простой самого include.

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


IF($time2 < $_time_t)
   // условие сработает снова через 2 минуты
 
   $time2 = $_time_t + 120
END_IF

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Потоки
« Reply #99 on: August 04, 2016, 03:16:48 PM »
...END_IF брал время...
END_IF в принципе ничего не берёт, это знак окончания блока IF

после исполнения  include
Где в примере эти include? Как они прописаны? В них код в подпрограммах?
Потому что с include тут такое вытворяют, что на голову не наденешь.

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

Code: (clickermann) [Select]
$downtime = 120
Все переменные глобальны. Код из всех include вставляется на место, где прописано подключение.
Примерно так:
Code: (clickermann) [Select]
// код в 1.cms
SUB(подпр_1)
    // ...
    $downtime = 120 // время простоя выставляем 120
END_SUB

// код в 2.cms
SUB(подпр_2)
    // ...
    $downtime = 30 // время простоя выставляем 30
END_SUB


// основной скрипт
#include "1.cms"
#include "2.cms"
IF($time2 < $_time_t)
    // ...
    IF($n = 3)
        подпр_1()
    ELSE
        подпр_2()
    END_IF
    // ...
    $time2 = $_time_t + $downtime
END_IF



Victor

  • Зашел в гости
  • *
  • Posts: 14
    • View Profile
Re: Потоки
« Reply #100 on: August 04, 2016, 03:57:21 PM »
Спасибо сегодня вечером попробую :)

Victor

  • Зашел в гости
  • *
  • Posts: 14
    • View Profile
Re: Потоки
« Reply #101 on: August 04, 2016, 04:52:28 PM »
Я так понимаю, если это

Code: (clickermann) [Select]
IF($time1 < $_time_t)
   INC($n,1)
   SWITCH($n)
   CASE(1)
      #include "1.cms"
   CASE(2)
      #include "2.cms"
   CASE(3)
      #include "3.cms"
   CASE(4)
      #include "4.cms"
   CASE(5)
      #include "5.cms"
   CASE(6)
      #include "6.cms"
   CASE(7)
      #include "7.cms"
   CASE(8)
      #include "8.cms"
   CASE(9)
      #include "9.cms"
   CASE(10)
      #include "10.cms"
   DEFAULT
   END_SWITCH
   IF($n = 10)
      $n = 0
   END_IF
   $time1 = $_time_t + $downtime
END_IF


Вставить сюда

Code: (clickermann) [Select]
IF($time1 < $_time_t)
   // условие сработает снова через 60 сек
 
   $time1 = $_time_t + 60
END_IF
 
IF($time2 < $_time_t)
   // условие сработает снова через 2 минуты
 
   $time2 = $_time_t + 120
END_IF
 
IF($time3 < $_time_t)
   // условие сработает снова через 10 минут
 
   $time3 = $_time_t + 600
END_IF
 
WAITMS(50)




ПОЛУЧИМ  ЭТО и скрип будет работать.
Проверте пожалуйста ни накосячил ли я где с блоками IF(я их описывал как END_IF).

Code: (clickermann) [Select]

IF($time1 < $_time_t)
   // условие сработает снова через $downtime (описан в поключаемом модуле)
    INC($n,1)
   SWITCH($n)
   CASE(1)
      #include "1.cms"
   CASE(2)
      #include "2.cms"
   CASE(3)
      #include "3.cms"
   CASE(4)
      #include "4.cms"
   CASE(5)
      #include "5.cms"
   CASE(6)
      #include "6.cms"
   CASE(7)
      #include "7.cms"
   CASE(8)
      #include "8.cms"
   CASE(9)
      #include "9.cms"
   CASE(10)
      #include "10.cms"
   DEFAULT
   END_SWITCH
   IF($n = 10)
      $n = 0
   END_IF
   $time1 = $_time_t + $downtime
END_IF

 
IF($time2 < $_time_t)
   // условие сработает снова через 2 минуты
 
   $time2 = $_time_t + 120
END_IF
 
IF($time3 < $_time_t)
   // условие сработает снова через 10 минут
 
   $time3 = $_time_t + 600
END_IF
 
WAITMS(50)



И в итоге я имею три блока IF, из которых два с постоянной задержкой, а один с загр кодом и переменной задержкой.
Неужели победа!!!

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Потоки
« Reply #102 on: August 04, 2016, 06:24:22 PM »
Ну, если в инклюдах будет прописано $downtime=...

Но это не нормальное использование include. Если там есть подпрограммы, то работать не будет.


Victor

  • Зашел в гости
  • *
  • Posts: 14
    • View Profile
Re: Потоки
« Reply #103 on: August 04, 2016, 07:31:52 PM »
В #include имеются только блоки IF(поиск текста по цвету, на веб странице.никаких переходов по строкам кода, все последовательно), что не пойдет работать?  :'(

Напишите пожалуйста как правильно, чувствую что очень просто но сам не соображу :-[
Я так понимаю надо правильно, подключаемый (#include)код оформить. Но как? ::)
« Last Edit: August 05, 2016, 12:40:52 AM by Victor »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Потоки
« Reply #104 on: August 05, 2016, 08:33:57 AM »
Если там есть подпрограммы, то работать не будет.
Что здесь непонятного? Если подпрограмм нет, то всё будет нормально.