The Godot emit_signal() only fires once per call. So the idea will be to design your code so that it only fires when the variable is updated.
This design fires a signal called OnlyOnce when 4 seconds has passed
extends Control
#+/- seconds
var CustomTimer = 4
signal OnlyOnce
func _process(delta):
#make the code for the timer
if CustomTimer > 0:
CustomTimer -= delta
else:
#Now we fire the signal only once
emit_signal("OnlyOnce")
#ResetTimer
CustomTimer = 4
The other receiving object will have a link to the signal that looks like this:
extends Label
var SignalCounter = 0
func _on_Control_OnlyOnce():
SignalCounter += 1
self.text = str(SignalCounter)
This text will now update every 4 seconds.
We could also have avoided signals:
extends Label
var FireCounter = 0
func UpdateText():
FireCounter += 1
self.text = str(FireCounter)
This is very similar to the signal, it is a function that any object can call.
Then in the controller we call this function directly:
extends Control
#+/- seconds
var CustomTimer = 4
func _process(delta):
#make the code for the timer
if CustomTimer > 0:
CustomTimer -= delta
else:
#Instead of a signal we call the function in the other object
$Label.UpdateText()
#ResetTimer
CustomTimer = 4