Seite 1 von 1

[gelöst] alternerierender Timer / Puls

Verfasst: Di 9. Mär 2021, 20:12
von Makromador
Hallo,

versuche gerade einen alternierenden Timer zu programmieren. Der hierfür benutzte Serviçe ist ein asynchroner Callback, also ein Rücksprung, bei dem auch laufende Anwendungen umgangen werden können.
Das funktioniert auch ganz wie gewünscht bis zum 2. Aufruf der notify()-Prozedur. Dann ruft sich diese nicht mehr selbst auf. Oder anders formuliert, nachdem der Wert für die Variable cnt = 2 erreicht wurde, zählt der Timer scheinbar nicht mehr weiter.

Woran kann das liegen? Jeder Hinweis willkommen.

Dazu habe ich ein Beispiel programmiert, mit dem man es testen kann. Mann muss sich nur einen Dialog (Dialog1)mit einem Label (Label1) zusammenbauen und kann das testen.

Code: Alles auswählen

Option Explicit

Dim cnt 
Dim oDlg

Dim	oASync
Dim	oCallback
	
sub testtimer

	cnt = 0

	oDlg = CreateUnoDialog(GlobalScope.DialogLibraries.Test.Dialog1)

	oASync = CreateUnoService ("com.sun.star.awt.AsyncCallback")
	oCallback = CreateUnoListener ("Callback_", "com.sun.star.awt.XCallback")
	oASync.addCallback(oCallback, "Pos")
	
	oDlg.getControl("Label1").Text = "Status: " & cnt
	oDlg.execute()
	
end sub

Sub Callback_notify(aData)
	
	If aData = "Pos" Then
		wait(1000)
		cnt = cnt+1
		oDlg.getControl("Label1").Text = "Status: " & cnt		
		oCallback.notify("Neg")
	ElseIf aData = "Neg" Then
		wait(1000)
		cnt = cnt+1
		oDlg.getControl("Label1").Text = "Status: " & cnt
		oCallback.notify("Pos")
	End If
	
End Sub
Bereits vielen Dank für die Unterstützung

Makromador

Re: alternerierender Timer / Puls

Verfasst: Sa 3. Apr 2021, 17:13
von mikele
Hallo,
so zählt er ewig weiter

Code: Alles auswählen

Sub Callback_notify(aData as string)
	dim tmp as string
	If aData = "Pos" Then
		wait(1000)
		cnt = cnt+1
		oDlg.getControl("Label1").Text = "Status: " & cnt		
		tmp="Neg"
	Else 
		wait(1000)
		cnt = cnt+1
		oDlg.getControl("Label1").Text = "Status: " & cnt
		tmp="Pos"
	End If
	oASync.addCallback(oCallback, tmp)
	
End Sub

Re: alternerierender Timer / Puls

Verfasst: Do 8. Apr 2021, 16:37
von Solarman
Thx for the snipped.

btw: if you change oDlg.execute() to oDlg.setVisible(True), then you can continue working on the spreadsheet while the counting goes on.

Re: alternerierender Timer / Puls

Verfasst: Di 14. Jun 2022, 10:12
von Makromador
Auch wenn nun einige Zeit vergangen ist. Super, Danke für die Lösung. Das hilft mir weiter.