Timer

Автор Lunatic, 17 июля 2013, 21:38

0 Пользователи и 1 гость просматривают эту тему.

Lunatic

Народ! Беда! Хочу сделать автозакрытие документа по таймауту. Событие сброса таймера можно поцепить на SelectionChange к примеру, но как организовать сам таймер?

Ведь он должен работать в потоке. Дабы не лочить события которые нужно обработать. (Пробовал и без Sleep, толку мало, приложение даже закрыть нельзя пока не выйдет из цыкла)

While GetTickCount - S < InActiveTime
   Sleep 100
   DoEvents
Wend


Тоже не работает.
Application.OnTime

Пробовал CreateThread не создаёт поток, пробовал даже написать свою отдельную библиотеку в которую выносил ожидание в поток, но СallBack'нуть функцию потом как по завершению таймера?

Может планировщики какие-то или cкрипты другие хоть что нибудь?)

Hasim

Идете на форум http://www.oooforum.org/forum/
Затем Search, набираете слово timer и читаете все найденные посты.

Lunatic

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

Hasim

Стало быть, читали этот пост Timer in OOBasic, особенно начало:
ЦитироватьOOBasic lacks a timer functionality. This post shows, how to implement a timer functionality in OOBasic using BeanShell.
Если уж на том форуме с созданием таймера проблемы, то на этом форуме это вообще неразрешимая проблема, т.к. здесь никто никогда этим не занимался.

Lunatic

#4
Да читал. Но не смог понять как этот скрипт прикрутить


Использую Calc

Hasim

Ну, может быть, кто-то из местных профи заинтересуется и займется этим. Подождем.

Lunatic

Что-то вообще странное с BeanShell. Попытался создать пустой класс, всё равно орёт с той же ошибкой.

import com.sun.star.uno.Type;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.lib.uno.helper.PropertySet;
import com.sun.star.lib.uno.helper.WeakBase;
import com.sun.star.task.XJobExecutor;
import com.sun.star.lang.XInitialization;
import com.sun.star.beans.PropertyValue;
import com.sun.star.beans.XPropertyChangeListener;
import com.sun.star.beans.PropertyChangeEvent;
import com.sun.star.lang.EventObject;
import com.sun.star.uno.AnyConverter;
import com.sun.star.xml.crypto.sax.XElementStackKeeper ;

public class ms777Timer_01 {
public ms777Timer_01()  {
}
}

Object TA = new ms777Timer_01();
return TA;

Hasim

Выложите не обрывки кода, а весь файл.

Нашел простенькое, но подробное описание BeanShell & Basic:
BeanShell & Basic - пример взаимодействия

Lunatic

Оу) Вот такие примеры я люблю) Тут всё понятно и работает. Но что это нам даёт. В плане inline вставки другого скриптового языка. Ведь вся сложность в создании параллельного потока, который будет работать после того как произойдёт выход из скрипта вызвавшего его, и callback функции в макросе по наступлению события в нём.

Как уже писал пробовал написать отдельную библиотеку, которая бы создала поток, но увы ОО, действует по схеме. Attach-Call-Detach, поэтому созданный поток погибал в муках до наступления выходя природным путём. Подозреваю что со скриптами будет та же беда. Как заставить ОО выполнять что-то паралельно

ALexey7ov

Не знаком со всеми вышеизложенными решениями, с использованием CreateThread, Application.OnTime и на BenShell, но как насчёт такой схемы:
1) На событие открытия, например, текстового документа прицепить макрос.
2) Макрос получает модель запустившего его документа.
3) Ждёт 10 секунд (wait 10000) и закрывает документ.

Или, если я неправильно понял суть задачи, объясните подробнее.