OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 29 Март, 2024 02:27

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
СообщениеДобавлено: Вторник, 07 Февраль, 2012 16:25 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
viewtopic.php?p=70457#p70457
Александр Ильин писал(а):
Внимание! Если на одной машине запущено два или более экземпляров ББ, то первый прерывается по Ctrl+Break, второй прерывается по Ctrl+Shift+Break, третий и последующие - не прерываются....
На обсуждение указанного тормоза, который в линухах вообще не работает, наложилось утреннее зависание ББ (забыл INC в наскоро слепленном цикле) с последующем выискиванием и удалением нескольких временных файлов. :) Этим сподобился попробовать сделать файловый тормоз. Идея принадлежит ЕИЕ, он обещался сделать, но пока руки не дошли. :) Что получилось:

Наличие файла breakFileName проверяется каждые period секунд. По его появлении происходит попытка торможения, в случае успеха механизм отключается до удаления файла. (Факт удаления также проверяется каждые period секунд.)

Не проверенный момент: по идее, файл открывается из текущего каталога. Если в течении сеанса работы он изменится, то... :)

BB16rc6
Код:
   PROCEDURE KeyboardWatcher (main: INTEGER): INTEGER;   (* runs in a thread *)
->      CONST period = 30 * 1000;
->      CONST breakFileName = "break.me";
      TYPE P = PROCEDURE(w: INTEGER): INTEGER;
      VAR res, a: INTEGER; top, h: WinApi.HANDLE; done: BOOLEAN;
         context: WinApi.CONTEXT; mod: Module; isHungAppWindow: P;
->         lastCheckTime, time: LONGINT; exist, stop:  BOOLEAN;
   BEGIN
      done := FALSE;
      isHungAppWindow := NIL;
      h := WinApi.LoadLibraryA("user32.dll");
      IF h # 0 THEN
         isHungAppWindow := S.VAL(P, WinApi.GetProcAddress(h, "IsHungAppWindow"))
      END;
->      lastCheckTime := Time(); stop := TRUE;
      LOOP
         res := WinApi.GetAsyncKeyState(WinApi.VK_CANCEL);
         ...
--->         time := Time();
         IF time - lastCheckTime >= period THEN
            lastCheckTime := time;
            exist := WinApi.GetFileAttributes(breakFileName) # -1;
            IF stop # exist THEN
            ELSIF ~stop (* & ~exist *) THEN
               stop := TRUE
            ELSE (* stop & exist *)
               res := WinApi.SuspendThread(main);
               context.ContextFlags := {0, 16};
               res := WinApi.GetThreadContext(main, context);
               mod := modList; a := context.Eip;
               WHILE (mod # NIL) & ((a < mod.code) OR (a >= mod.code + mod.csize)) DO
                  mod := mod.next
               END;
               IF (mod # NIL) & (mod.name = "Kernel") THEN mod := NIL END;
               IF mod # NIL THEN
                  interrupted := TRUE;
                  INCL(S.VAL(SET, context.EFlags), 8);   (* set trap flag *)
                  res := WinApi.SetThreadContext(main, context);
                  stop := FALSE
               END;
               res := WinApi.ResumeThread(main);
               WinApi.Sleep(1);
               interrupted := FALSE
            END
--->         END
      END;
      RETURN 0
   END KeyboardWatcher;


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 09 Февраль, 2012 09:22 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
viewtopic.php?p=70457#p70457
Александр Ильин писал(а):
Внимание! Если на одной машине запущено два или более экземпляров ББ, то первый прерывается по Ctrl+Break, второй прерывается по Ctrl+Shift+Break, третий и последующие - не прерываются....
Кстати, в 1.6 механизм, как я понял, более универсальный, рассчитанный на любое число ББ.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 09 Февраль, 2012 09:36 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Правильно я понимаю, что этот файл в каждой рабочей папке свой-независимый?

Это к тому, что обычно из одной раб. папки запускается один ББ.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 09 Февраль, 2012 09:38 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Евгений Темиргалеев писал(а):
Кстати, в 1.6 механизм, как я понял, более универсальный, рассчитанный на любое число ББ.
Истинно глаголете.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 09 Февраль, 2012 14:10 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Info21 писал(а):
Правильно я понимаю, что этот файл в каждой рабочей папке свой-независимый?

Это к тому, что обычно из одной раб. папки запускается один ББ.
Да, независимый для текущей папки. По идее, она во время работы меняться не должна.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 18 Ноябрь, 2012 14:53 

Зарегистрирован: Четверг, 01 Июнь, 2006 11:14
Сообщения: 240
при попытке вставить в модуль Kernel от 1.5 ругается на строки:
Код:
context.ContextFlags!!! := {0, 16};
res := WinApi.GetThreadContext(main, context!!!);
mod := modList; a := context.Eip!!!;

INCL(S.VAL(SET, context.EFlags!!!), 8);   (* set trap flag *)
res := WinApi.SetThreadContext(main, context!!!);


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 19 Ноябрь, 2012 11:40 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Вклепал: оба механизма одновременно не работают, разбираться времени нет. Но для Ваших конкретных целей хватит. Пробуйте, пожалуйста.

StdCoder.Decode ..,, ..gD,...3QwdONl9RhOO9vRbf9b8R7fJHPNGomCrlAyIhgs,CbKBhZ
xi2,CoruKu4qouqm8rtuGfa4.hOO9vRb1Y66wb8RTfQ9vQRtIdvPZHWKqtCa.E.U5UtR02U.Qk
lbeZ3DPuP7PNNvQRtId9NPuP7X2hgnRAXDJ.QCPuP7PNG2sET1.PuP.MHT9N9nt.G2sIdvPZnt
gcghghZcZRC8T0E.EZ4,T.3O22.,.HN,cU.ktAcoZimBhWhiohgnZcZRC.,.D,,6.I16.M.6.J
Fyuv.A.2m,U.A.AU0Ky8.,UgU.UO.,.16.2Ue.0.,6YUoU.A1IU0Ky8.,Ub.,UO.,6U0c.2.eW
Ubl,U.2UE0e1CE,9T3E.0.x00.p.0.4.I3.0E6,1.8E.M.VX.IU6V,QIM2M.3.3c2M.F0,c3k.
E,G,GE,9T3E.0.tM.6.,EBU.kzV.I3t16.V2AU.k.a.8EHk.i.8E66.4.Ck.k.m0C.M8s.k.e0
0k7k.4.C.AU9U1.e0C.s5.cB.c7.6Hs.UK.U8.U,V1.1s3.s4.s76.b.1M.s.k.O1.e..a0C.A
UIU2A.s.M,3gwJ.,6.w72U.EBU.kzV.I3k.E6V.I5AU,U1.1c40U1.W1C.s,c.x.BcUZj06.,U
aA.2U.c4E.0c.8.,Ue6T6.2UE0CE.kxl,4.4EJUHU,A.Q.M.L.5.I3Q.kD.EP.EH.Eak,.h6..
I,.A6Q.M.j..r..D,,s2M.1.5.4ETE,q.A.Q.M.J.5.A3Q.M.d.7.Q.gUuU,A.Q.M.pE.Q.EQE
,u.4E3k18Mtf.0E.MD6.,UO.,.16.c8m5E.mP,U42.4EAE.KE.M.,U.oXgJ.BD03E,5TWKKvCo
rqqq4KrGqm8rtumdGbK,6.XDF9fR.ELO3U.Iy1U.2.G,0.O.0E.g04kDE28Mtf.2.W10.e,2.0
9,6.e0.,6YUVU,AQ6.2UDoa,ctFc...ELC39eP7fJHPNU.AS..RNFR9Nh0E.8D6..E,0.0k.C.
6.wz72eGxd1hc2heGhcUQdZBjWxhVJiYxeVZiX3hZJiU2ZhBgdphu2Y7pdIhc5hcGBZu2Y7p7k
RaEIeGE8ruuqt0mouKE4KEGLo8rm4Km0GJam4ak2CobuodGJE0rm8royKm0mS0mN0GJ0mM0HM0
nR0mVyIbC33fQ9PMLfFH9P9fH1PP996v763dMZPN1HLqqm8mRqk2aEf4Id0GtKqtmGE4KK0Guy
KR0mYu2EEqqtSKR0meCpW8pN8HLqomCrt4qnKqR0mvuKmeHEKpd.FOMR9NNPNrN1HM0HsMTfPd
PNl9Rp76LOFZeH98HbdARtETfPd1r76PvP7fC,NHT9Nf9P9vCP.FvPdvO9PSp763uHT8H9OERu
CPM0YhVRioRcchgXRhIBhhhgg2YoBhhhgu2YAxdCxc7pdIRbUggsBhnZig2YnZij3iu2YUIcDx
7.3OFDOGRO1HM0jfP796pND,NJbOFkV8rm4KuKqfaKrGqrSrWWrUWmxqLK0GFKImaKu8GK0GF8
GK0mxqLK2ag2YkY3..LOFZ0sF99RPuP71FOMR9NAccod7ZddYZU2adQbBA,ZPNb96pND,,EdKq
naqtGrm8LYyKuiomaLISLrGKK0mMCHK0mx4nymGECnIin2WGJQgoJig3YWJC2YeAZBEo.,dCv7
6ZPNb96576VtCPM0HMGB86ZPNgbU2aUYe6hcChV7M0Z1pVJ,...UoYZUQjlYZUIaxZZUQ4Un3h
dpgo3YXZim,.M0F1.Z15VBAV7gcCZcvgV76P..,dCvFeaqqKKIamR0mtGrr2Yug58peKoRqk2a
Eayob0p4ak2aEIemYOIEWqrQBYe6h6k285e1f0sFMNbvQMEFNPbvNN76V7901a0AV7A7qqtSKL
qqmC52Yx2YJR8kfqIYyKui2,,U76RT96pNDioW83.GpoCqpCorKLrGLIaGEiGE4HM01H68JlM0
mtKql0GuaqqwhpZiUIZd.HEdKIcKoUGp4ak2A,85..CpuCLsKKrGKeWKtK4FNP1XdQbBA,a.5H
rUioggBgbRiUIbxsSV79,NAhNTrN1HU7Et.i2.D0F1CoruKuEIq4mGECqru4AZvg,A,qqrGKEe
nSghjZgABhnZiv2YV3Yug55vPR1umo0rRqk2M0we6BdAhcU2ZhxhY3YX2YCBdA76B76F78196t
76PvP7f95vP7PNH76TeI,78196xND,NP.0mJ0mqy4CroermamI0GWyo4ak2A,gBI5q4uqmWLuq
k2aU7kW.A,a2FNPTHEC0.q4Rlkqqmg53tG9fQRPNNf6H76d0,NPT9N,dCod7ZdUgcCZcv.HU7l
qy45,Ye6l4k2kouKuKKt8ru0LuKKm0GRqXI,k2kYuoVmIICJLOpUmIICpWGJK0mly4W5VfNH79
,7CHtCH68QiZZiUYimBgk3YaZhVxgUIZd.H.Z1sG.QeZZiI,.23..HN1HM0a.90k2cQ..cICru
qqmGJo8rm68kI.HU9hcGp7kdmqmKKsWmMamR0GIeGESrkaKu0GnyKt0mq4qo2Yo3hmVUYij3Yi
xhoBhXhgUYichgUAhiZiZ,0GtKqsKrmCLu0GJa0A,a4.91oc,ZdHhcBAV7M0KJbGpYmIEWmqy4
UdsHZW9hcG,w6ABMRG5,dD,7RTP8PM0Hk2K2PM0UvIZdgV7kfaKr4IsaKLCJqK4k4a.dPO2YuE
ea4FVBU7p6dPOPHEqGEmqkCLu.Uyg5VPNZ1GJYU7M0Nnt..pVoBhhtCPM0AVZ3jdRC,dCvlfaK
r4IssF99RBOONPN18RdfQkm2ZWJiZFXEbkI0mF0mK4nRqk2M0HWnZij7657699SEeW2k2KIaCp
YOIEurtGrr0bcIZUoYUojZ3jdRCeWUY8.HktGrr0buEe83PM0Hk2K2986Fd8,tQd1B7699SH1g
,A,dvPkZ..d0.Q3X,r,4Xn,sP.M083.a.Z1..bOREm.W0A3k2sMuaZFLO4C5QD.k2cQ.L0U5Vc
,5068EK.M8r,a.P1pVhFakR.C4ELa4k2sJF0UUQ2R0O0FVw.RtMTXd.4aykq.22q4QC.U7UhVu
kqErK4k2MFRWBU7kY68665,.PXiMM2Yx..UUUUI5u2,NF.a.HWhVX.G3q.a.a4.cCY8Q5M0MGR
0..Ew6Q.a.Crm22.22U7Um,Q7.CpmY8.Uc..M8U7UnVUI5O2g,Hk2MF.a.Z1sG.I8.EIUd.a.L
0UHZB.,,j1.66W422.51..,,.U7ko.MNI5O2.Hke..kIw7Q7.S2a4gCdXUo5y4aU7g6q..K2r,
ZGeKJduIE0n4akWuYUQdZBjW,.in4qEIeGE8EWKKvmoouqpKKtuGaaKr2Y0ZhVRgfJcj3jmoZZ
NN,dCvlo8nMCrwCrVaLtaKqmqoCKEaKN412hVJiVRgohgmRiUQdZJiiFGiGEOooman3Y6xhnZi
4BhgVHZiYZdjBgYhgmhVl2Y,3ikZhjxgjpZdRgj3Ym2Y2xhXZhjxgj,CHECJXmorS4EO0mVOIa
y4Up2Y2ZitZdjxAUq2YaxhgZgZJidhhbpZdRASHEyKsKKraqqS4gVs2YghgVpgdhhb,,NA,NHT
fR9f95PR0GN0mVyKsaLLCqusA,7HHfPLf95PRZHO0GcaqliKLCquMB,tIdXiQgpJCh76FOMR9N
RtMfXr2YIBgWZhZpZXhC8EEemIqE,5TeK45uPIijZhghgmRiiQ8CIu8LqGomCrl0ksHpm..oZ1
xhi,6F9vQ59.C24ai,Et...ktu0.Y62Umb.2.Y02.AV.2.,6..M.3Qwd0ZORNPNZvQRtIIepZB
G20ksH3.bf9ZORNPNG20EtD.0E.ses,,UXW.2.5Ie.sQRtIQeoBjghg2hgn7.X5.u0n9PU.Iy6
6.0.U62.e32.86.c918R.9HWQiX3.7.,..Y22U,2.2.2YXK90U.IWoB.JfGA.A.2U.E,9T36.0
..IX.U.U,.JFk,0E65.2..xZ1...
--- end of encoding ---


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 19 Ноябрь, 2012 12:15 

Зарегистрирован: Четверг, 01 Июнь, 2006 11:14
Сообщения: 240
Евгений Темиргалеев
попробовал. создание файла останавлвает.
если файл в директории есть и зациклили программу, то переименование в др файл, а потом обратно, тоже срабатывает остановка. но периодически проявляется такой эффект:
портится какое-нибудь из окон. если после этого эффекта сохранить документ и открыть заново, то откроет нормально.
буду пробовать дальше. спасибо.


Вложения:
a2.png
a2.png [ 162.22 КБ | Просмотров: 13105 ]
a1.png
a1.png [ 151.87 КБ | Просмотров: 13105 ]
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 19 Ноябрь, 2012 12:48 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Это прерывание застало ББ внутри кода каркаса при обновлении данной вьюшки, скорее всего.
Можно не закрывать, а делать на данное окно Dev->Revalidate View.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 19 Ноябрь, 2012 12:55 

Зарегистрирован: Четверг, 01 Июнь, 2006 11:14
Сообщения: 240
Илья Ермаков писал(а):
Это прерывание застало ББ внутри кода каркаса при обновлении данной вьюшки, скорее всего.
Можно не закрывать, а делать на данное окно Dev->Revalidate View.

получилось, работает, спасибо=)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 19 Ноябрь, 2012 17:49 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
___ писал(а):
получилось, работает, спасибо=)
Не уверен, что въехал.

Если будет что-то годное для учебных сборок, пож., сообщите мне.
Только понятно :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 19 Ноябрь, 2012 18:47 

Зарегистрирован: Четверг, 01 Июнь, 2006 11:14
Сообщения: 240
Если файл оставался в папке, то бывало, срабатывали еще раз (забыл удалить стоп-файл, закрыл бб, открыл опять, срабатывают прерывания).
решил сделать так, в папку с пускачем положил еще один питоновый скрипт:
Код:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import time

file = open("stop.me", "w+")
file.close()
time.sleep(5)
os.remove("stop.me")

при запуске, создает стоп-файл, ждет 5сек и удаляет его.

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

иногда при прерывании портились содержимое окон, по совету Ильи "делать на данное окно Dev->Revalidate View" помогает вернуть окно в норму. поместил данный пункт из Dev в школьную, чтобы был поближе на всякий случай.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB