Author Topic: проблема с потоком помогите пожалуйста  (Read 2013 times)

0 Members and 1 Guest are viewing this topic.

МИХАИЛ1989

  • Зашел в гости
  • *
  • Posts: 8
    • View Profile
Добрый вечер. Проблема такая , в скрипте есть поток после выполнения которого скрипт должен начинаться сначала. Но проблема в том что после выполнения потока скрипт либо останавливается , либо начинает продолжаться с места которое было прервано потоком.Помогите в чем проблема
Code: (clickermann) [Select]
LOGWRITE ("Label")
label:
WAIT(2)
LOGWRITE ("перемещение курсора 595,452")
MOVE(351,258)//перемещает курсор мыши
WAIT(2)
LOGWRITE ("клик 351,258")
LCLICK(351,258)//клик
WAITMS(550)
LOGWRITE ("Ожидание цвета 595,452")
$time=$_time_t+10
GETSCREEN
WHILE(PXL(595,452)!1563049)
   IF($time<$_time_t)
      LOGWRITE ("клик 351,258")
      LCLICK(351,258)//клик
      WAITMS(550)
      $time=$_time_t+10
   END_IF
   WAITMS(550)
   GETSCREEN
END_CYC
WAITMS(550)
LOGWRITE ("Ожидание цвета 488,69,533,97")
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PIXEL_IN (488,69, 533,97, 263515, 2237002)
      $check = 1
      LOGWRITE ("клик 307,86")
      LCLICK(307,86)//клик
      WAIT(6)
   ELSE
      WAIT(5)
   END_IF
END_CYC
WAIT(3)
LOGWRITE ("Ожидание цвета 779,86")
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF(PXL(779,86)=131586)
      $check = 1
      LOGWRITE ("клик 719,501")
      LCLICK(719,501)//клик
      WAITMS(800)
   ELSE
      WAITMS(800)
   END_IF
END_CYC
WAIT(1)
LOGWRITE ("клик 1091,533")
LCLICK(1091,533)
WAIT(17)
LOGWRITE ("клик 1132,179")
LCLICK(1132,179)
WAIT(3)
LOGWRITE ("клик 1091,535")
LCLICK(1091,535)
WAITMS(900)
LOGWRITE ("Ожидание цвета 321,151")
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF(PXL(321,151)=1821599)
      $check = 1
      LOGWRITE ("клик 491,145")
      LCLICK(491,145)//клик
      WAIT(2)
   ELSE
      WAIT(2)
   END_IF
END_CYC
WAIT(3)
LOGWRITE ("Ожидание цвета 691,66")
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF(PXL(691,66)=1563049)
      $check = 1
      LOGWRITE ("клик 596,263")
      LCLICK(596,263)//клик
      WAIT(2)
   ELSE
      WAIT(2)
   END_IF
END_CYC
WAIT(3)
LOGWRITE ("клик 805,289")
LCLICK(805,289)
WAIT(3)
LOGWRITE ("Ожидание цвета 686,335")
$time=$_time_t+10
GETSCREEN
WHILE(PXL(686,335)!819302)
   IF($time<$_time_t)
      LOGWRITE ("клик 803,316")
      LCLICK(803,316)//клик
      WAITMS(550)
      $time=$_time_t+10
   END_IF
   WAITMS(550)
   GETSCREEN
END_CYC
WAIT(1)
LOGWRITE ("клик 697,391")
LCLICK(697,391)
WAITMS(50)
GETSCREEN
LOGWRITE ("Цвет 692,67 = ", PXL(692,67))
GETSCREEN
WHILE(PXL(692,67)=1563049) // ожидает Если в координате 692,67 цвет 1563049
   WAITMS (50)
   GETSCREEN
END_CYC
WAITMS(150)
LOGWRITE ("клик 591,44")
LCLICK(591,44) // кликаем если цвет 1563049 пропал
WAITMS(250)
LOGWRITE ("Ожидание цвета 307,304")
$time=$_time_t+10
GETSCREEN
WHILE(PXL(307,304)!1836252)
   IF($time<$_time_t)
      LOGWRITE ("клик 591,44")
      LCLICK(591,44)//клик
      WAITMS(250)
      $time=$_time_t+10
   END_IF
   WAITMS(250)
   GETSCREEN
END_CYC
WAIT(5)
thread(t2)
   GETSCREEN(756,374,756,374)
   IF(PXL(756,374)=56485)
      LCLICK(589,41)
      WAITMS(500)
   ELSE
      WAITMS(250)
   END_IF
end_thread
WAITMS(500)
LOGWRITE ("гото")
GOTO(label)
« Last Edit: March 19, 2018, 07:32:31 AM by Oraven »

open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Вы не правильно понимаете принцип работы потоков. Вот цитата из справки:
"Поток представляет собой независимую цепочку действий, выполняющихся одновременно с основным сценарием и другими потоками."
Попробуйте так:
Code: (clickermann) [Select]
GETSCREEN(756,374,756,374)
IF(PXL(756,374)=56485)
   SETTHREAD (t2, 2) // 0 - Пауза, 1 - Старт, 2 - Стоп
   LCLICK(589,41)
   WAITMS(500)
   SETTHREAD (t2, 1) // 0 - Пауза, 1 - Старт, 2 - Стоп
ELSE
   WAITMS(250)
END_IF
thread(t2)
   LOGWRITE ("Label")
   WAIT(2)
   LOGWRITE ("перемещение курсора 595,452")
   MOVE(351,258)//перемещает курсор мыши
   WAIT(2)
   LOGWRITE ("клик 351,258")
   LCLICK(351,258)//клик
   WAITMS(550)
   LOGWRITE ("Ожидание цвета 595,452")
   $time=$_time_t+10
   GETSCREEN
   WHILE(PXL(595,452)!1563049)
      IF($time<$_time_t)
         LOGWRITE ("клик 351,258")
         LCLICK(351,258)//клик
         WAITMS(550)
         $time=$_time_t+10
      END_IF
      WAITMS(550)
      GETSCREEN
   END_CYC
   WAITMS(550)
   LOGWRITE ("Ожидание цвета 488,69,533,97")
   $check = 0
   WHILE($check = 0)
      GETSCREEN
      IF_PIXEL_IN (488,69, 533,97, 263515, 2237002)
         $check = 1
         LOGWRITE ("клик 307,86")
         LCLICK(307,86)//клик
         WAIT(6)
      ELSE
         WAIT(5)
      END_IF
   END_CYC
   WAIT(3)
   LOGWRITE ("Ожидание цвета 779,86")
   $check = 0
   WHILE($check = 0)
      GETSCREEN
      IF(PXL(779,86)=131586)
         $check = 1
         LOGWRITE ("клик 719,501")
         LCLICK(719,501)//клик
         WAITMS(800)
      ELSE
         WAITMS(800)
      END_IF
   END_CYC
   WAIT(1)
   LOGWRITE ("клик 1091,533")
   LCLICK(1091,533)
   WAIT(17)
   LOGWRITE ("клик 1132,179")
   LCLICK(1132,179)
   WAIT(3)
   LOGWRITE ("клик 1091,535")
   LCLICK(1091,535)
   WAITMS(900)
   LOGWRITE ("Ожидание цвета 321,151")
   $check = 0
   WHILE($check = 0)
      GETSCREEN
      IF(PXL(321,151)=1821599)
         $check = 1
         LOGWRITE ("клик 491,145")
         LCLICK(491,145)//клик
         WAIT(2)
      ELSE
         WAIT(2)
      END_IF
   END_CYC
   WAIT(3)
   LOGWRITE ("Ожидание цвета 691,66")
   $check = 0
   WHILE($check = 0)
      GETSCREEN
      IF(PXL(691,66)=1563049)
         $check = 1
         LOGWRITE ("клик 596,263")
         LCLICK(596,263)//клик
         WAIT(2)
      ELSE
         WAIT(2)
      END_IF
   END_CYC
   WAIT(3)
   LOGWRITE ("клик 805,289")
   LCLICK(805,289)
   WAIT(3)
   LOGWRITE ("Ожидание цвета 686,335")
   $time=$_time_t+10
   GETSCREEN
   WHILE(PXL(686,335)!819302)
      IF($time<$_time_t)
         LOGWRITE ("клик 803,316")
         LCLICK(803,316)//клик
         WAITMS(550)
         $time=$_time_t+10
      END_IF
      WAITMS(550)
      GETSCREEN
   END_CYC
   WAIT(1)
   LOGWRITE ("клик 697,391")
   LCLICK(697,391)
   WAITMS(50)
   GETSCREEN
   LOGWRITE ("Цвет 692,67 = ", PXL(692,67))
   GETSCREEN
   WHILE(PXL(692,67)=1563049) // ожидает Если в координате 692,67 цвет 1563049
      WAITMS (50)
      GETSCREEN
   END_CYC
   WAITMS(150)
   LOGWRITE ("клик 591,44")
   LCLICK(591,44) // кликаем если цвет 1563049 пропал
   WAITMS(250)
   LOGWRITE ("Ожидание цвета 307,304")
   $time=$_time_t+10
   GETSCREEN
   WHILE(PXL(307,304)!1836252)
      IF($time<$_time_t)
         LOGWRITE ("клик 591,44")
         LCLICK(591,44)//клик
         WAITMS(250)
         $time=$_time_t+10
      END_IF
      WAITMS(250)
      GETSCREEN
   END_CYC
   WAIT(5)
end_thread
« Last Edit: March 18, 2018, 09:44:12 PM by open_78 »

МИХАИЛ1989

  • Зашел в гости
  • *
  • Posts: 8
    • View Profile
А можно сюда добавить второй поток ? Если в любой момент появится IF(PXL(779,86)=131586) то  LCLICK(719,501) и основной сценарий продолжится дальше?

open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Зачем ещё поток? Можно добавить ещё одну проверку которая поставит поток на паузу.
Code: (clickermann) [Select]
GETSCREEN(756,374,756,374)
IF(PXL(756,374)=56485)
   SETTHREAD (t2, 2) // 0 - Пауза, 1 - Старт, 2 - Стоп
   LCLICK(589,41)
   WAITMS(500)
   SETTHREAD (t2, 1) // 0 - Пауза, 1 - Старт, 2 - Стоп
ELSE
   GETSCREEN(779,86,779,86)
   IF(PXL(779,86)=131586)
      SETTHREAD (t2, 0) // 0 - Пауза, 1 - Старт, 2 - Стоп
      LCLICK(719,501)
      WAITMS(500)
      SETTHREAD (t2, 1) // 0 - Пауза, 1 - Старт, 2 - Стоп
   ELSE
      WAITMS(250)
   END_IF
END_IF
/////////

open_78

  • Активный участник
  • ***
  • Posts: 285
  • v4.13.014 x64
    • View Profile
Но надо не забывать что GETSCREEN (буфер анализа) у потоков и основного кода общий, и они могут пересекаться.

МИХАИЛ1989

  • Зашел в гости
  • *
  • Posts: 8
    • View Profile
Спасибо большое, очень помог :) ;)