Вверх ↑
Этот топик читают: Гость
Главный модератор
Ответов: 2998
Рейтинг: 396
#76: 2005-12-05 23:46:26 ЛС | профиль | цитата
Оператор On Error Resume Next, конечно используется, но зависание происходит или в ядре WMI или в WSH, и управление в скрипт не возвращается. По крайней мере так оно выглядит из HiAsm'a :? Буду ещё пробовать варианты полусинхронных и асинхронных WQL-запросов или выполнять скрипт внешним запуском без ожидания завершения, но это решение не очень "красивое" - смахивает на работу из командной строки
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Главный модератор
Ответов: 2998
Рейтинг: 396
#77: 2006-11-04 23:17:21 ЛС | профиль | цитата
tsdima, Вы, как соавтор компонента VBJScript, можете объяснить поведение компонента с другим важным компонентом HiAsm?
code_535
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
файлы: 1code_535.txt [969B] [469]
Ответов: 2125
Рейтинг: 159
#78: 2006-11-04 23:41:06 ЛС | профиль | цитата
Первая и третья кнопка запускают скрипт в том же Thread, что и само приложение, а вот вторая - непосредственно в новом Thread-е и вот тут чего-то нехватает. Сама по себе Script Engine может работать в нескольких Thread-ах, тут надо глубже копаться.

З.Ы. IActiveScript::GetScriptDispatch почему-то возвращает nil. Возможно потому, что скрипт создаётся в одном Thread-е, а используется в другом. Если добавить анализ возвращаемого значения - ошибка не возникает, но и скрипт, естесственно, не вызывается
procedure THIVBJScript._DoWork;
var Disp:IDispatch; dt,idx:TVariantArg;
begin
if FEngine = nil then Exit;
FEngine.GetScriptDispatch(nil, Disp);
if Disp = nil then Exit;
карма: 1

0
Главный модератор
Ответов: 2998
Рейтинг: 396
#79: 2006-11-04 23:56:11 ЛС | профиль | цитата
Чем могу помочь в раскопках сих?:? В пределах, конечно, своей компитенции
Вопрос этот для меня стал важным уже давно и с Dilma мы его уже перетерали (впрочем безрезультатно, насколько мне не изменяет память). Даже Галков моей беде посочувствовал и предложил третий вариант для использования. Можно, конечно и так жить, но ведь нет пределала совершенствованию, а значит можно что-нибудь придумать... :?
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Ответов: 9906
Рейтинг: 351
#80: 2006-11-05 00:00:49 ЛС | профиль | цитата
не помню...
карма: 9

0
Ответов: 2125
Рейтинг: 159
#81: 2006-11-05 00:12:34 ЛС | профиль | цитата
Кроме того, для нового Thread никто не вызывает CoInitialize, соответственно СОМ объекты нельзя создавать. Проблему можно решить так:
uses Kol,Share,Windows,Debug,ActiveX;
...
function THIThread.Execute(Sender:PThread): Integer;
begin
CoInitialize(nil);
FStop := false;
repeat
sleep(_prop_delay);
_hi_OnEvent(_event_onExec);
if Assigned(_event_onSyncExec.Event) then Sender.Synchronize(SyncExec);
until Sender.Terminated or _prop_FastStop or FStop;
Sender.Tag := 0;
CoUninitialize;
Result := 0;
end;
Однако, создавать скрипт нужно тоже в новом Thread, используя, например, динамический мультик:
Add(MultiElementEx,14825340,259,175)
{
Mode=1
}
BEGIN_SDK
Add(EditMultiEx,12582104,3,3)
{
WorkCount=#5:##add|
Point(##add)
link(##add,1551462:doWork,[(29,9)(29,41)])
}
Add(VBJScript,1551462,56,35)
{
WorkPoints=#6:doWork|
Script=#27:Function doWork(Data,Index)|13: MsgBox "OK!"|12:End Function|
}
END_SDK
Add(Button,15231113,133,175)
{
Left=40
Top=60
Width=75
Caption="Error"
link(onClick,5240250:doStart,[])
}
Add(Thread,5240250,196,175)
{
FastStop=0
link(onExec,14825340:##add,[])
}
карма: 1

0
Главный модератор
Ответов: 2998
Рейтинг: 396
#82: 2006-11-05 00:20:24 ЛС | профиль | цитата
Интересное решение - надо попробовать на реальном чём-нибудь

[size=-2]------ Добавлено в 00:20
При закрытии формы - Runtime Error!
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Ответов: 16884
Рейтинг: 1239
#83: 2006-11-05 00:35:13 ЛС | профиль | цитата
При закрытии формы - Runtime Error!
с Delphi все OK
c FPC
Compiling ActiveKOL.pas
ActiveKOL.pas(8,2) Fatal: Can't open include file "KOLDEF.INC"
Error: H:\HiAsm362b160\compiler\fpc\ppc386.exe returned an error exitcode (normal if you did not specifiy a source file to be compiled)


[size=-2]------ Добавлено в 00:35
Извиняюсь. Забыл про VBJ+FPC=Error
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Главный модератор
Ответов: 2998
Рейтинг: 396
#84: 2006-11-05 01:36:04 ЛС | профиль | цитата
Tad писал(а):
Извиняюсь. Забыл про VBJ+FPC=Error


Уже не должно быть такого равенства, стараниями tsdima

[size=-2]------ Добавлено в 00:55
Ищё вопрос:
code_536

[size=-2]------ Добавлено в 01:13
Точнее вот так работает, но опять ошибка при закрытии формы:
code_537

[size=-2]------ Добавлено в 01:36
Всё это хорошо, НО... если предполагается продолжительная работа схемы, то где напастись ресурсов для неё? Ежесекундный ##add VBJScript'a не живет и пары минут
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
файлы: 2code_536.txt [856B] [465], code_537.txt [867B] [451]
Ответов: 2125
Рейтинг: 159
#85: 2006-11-05 12:32:18 ЛС | профиль | цитата
Tad писал(а):
Can't open include file "KOLDEF.INC"
Я где-то приаттачивал файлы, необходимые для FPC, чтобы VBJScript компилировался. Кажется, в последней версии. Dilma сказал, что обновил инсталлятор FPC.

Nic писал(а):
Ежесекундный ##add VBJScript'a не живет и пары минут
Нет, ну вы посмотрите! Я же дал пример, чтобы только показать, что работает. А уж ##delete вызывать посредством хаба - это уж вы сами
Ищё вопрос:
Если вопрос: "почему не работает?", то потому-что Mode=Dynamic, а вы #add не сделали.
ошибка при закрытии формы
Те же яйца только сбоку: удалять надо тоже в новом Thread-e.
Add(Button,3690514,161,168)
{
Left=110
Top=175
link(onClick,9416562:doStart,[])
}
Add(ChildPanelEx,9416562,238,168)
{
}
BEGIN_SDK
Add(EditMultiEx,11495718,3,3)
{
WorkCount=#7:doStart|
Width=391
Height=193
link(doStart,5240250:doStart,[(43,9)(43,27)])
}
Add(Panel,228887,35,105)
{
Left=35
Top=105
Point(doColor)
}
Add(MultiElementEx,57829,308,21)
{
Mode=1
}
BEGIN_SDK
Add(EditMultiEx,12582104,3,3)
{
WorkCount=#5:##add|8:##delete|
Point(##add)
Point(##delete)
link(##add,1551462:doWork,[(29,9)(29,41)])
}
Add(VBJScript,1551462,56,35)
{
WorkPoints=#6:doWork|
Script=#27:Function doWork(Data,Index)|13: MsgBox "OK!"|12:End Function|
}
END_SDK
Add(Thread,5240250,77,21)
{
FastStop=0
link(onExec,10059412:doEvent1,[])
}
Add(DoData,11455944,231,42)
{
Data=Integer(0)
link(onEventData,57829:##delete,[(285,48)(285,34)])
}
Add(Hub,10059412,147,21)
{
link(onEvent1,57829:##add,[])
link(onEvent2,11455944:doData,[(205,34)(205,48)])
}
END_SDK
карма: 1

0
Ответов: 9906
Рейтинг: 351
#86: 2006-11-05 14:47:14 ЛС | профиль | цитата
tsdima, чего ты так не любишь OnlyOnce
Add(MultiElementEx,57829,140,21)
{
Mode=2
}
BEGIN_SDK
Add(EditMultiEx,12582104,3,3)
{
WorkCount=#2:Do|
link(Do,1551462:doWork,[(29,9)(29,41)])
}
Add(VBJScript,1551462,56,35)
{
WorkPoints=#6:doWork|
Script=#27:Function doWork(Data,Index)|13: MsgBox "OK!"|12:End Function|
}
END_SDK
Add(Thread,5240250,77,21)
{
FastStop=0
link(onExec,57829:Do,[])
}
карма: 9

0
Ответов: 16884
Рейтинг: 1239
#87: 2006-11-05 16:25:33 ЛС | профиль | цитата
Dilma сказал, что обновил инсталлятор FPC.
и где он лежит обновленный ?
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 2125
Рейтинг: 159
#88: 2006-11-05 16:49:45 ЛС | профиль | цитата
Galkov, в примере был Dynamic, я не стал менять. С OnlyOnce, конечно, тоже работает.
Tad, не знаю, видимо на том же месте, где раньше старый лежал.
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#89: 2006-11-05 17:31:51 ЛС | профиль | цитата
Старый был прицеплен к 157-й. Можно было бы прицепить или NEW или дату, а так кто знает там новый или старый
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 9906
Рейтинг: 351
#90: 2006-11-13 23:56:57 ЛС | профиль | цитата
tsdima, вот тут:
http://hiasm.googlecode.com/svn/elements/delphi/task.txt
- коллега Nic выступает за твои модификации в Thread
Но ведь криво это как-то: какой-то ActiveX... с какой-то радости... а почему только он...

Это что, не решаемо в VBJScript
Чувствую тут неправду, а знаний не хватает

Выскажись, пожалуйста...
карма: 9

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)