Zum Hauptinhalt springen
Echtzeit-Radar & Feeds
Alle RSS Feeds ➔
👥 Community & Social
Windows Tipps & SecurityGrafikkarte vor Überhitzung schützen: So geht’s(25.09.2026 um 08:00 Uhr)
••••••••••
Windows Tipps & SecurityGrafikkarte vor Überhitzung schützen: So geht’s(25.09.2026 um 08:00 Uhr)
••••••••••
Intelligence View
⚡ tsecurity.de Intelligence

Combine #11: Temporizadores

RunLoop Todo hilo creado con la clase Thread puede tener su propio RunLoop: Foundation lo puede crear al invocar RunLoop.current desde un hilo. Sin embargo, la clase RunLoop no es "thread-safe", razón por la cual no se debería invocar m…

0
↗ Quelle (dev.to)
Reagiere als Erste:r — dein Feedback zählt!




RunLoop



Todo hilo creado con la clase Thread puede tener su propio RunLoop: Foundation lo puede crear al invocar RunLoop.current desde un hilo. Sin embargo, la clase RunLoop no es "thread-safe", razón por la cual no se debería invocar métodos del RunLoop de otro hilo distinto de current. Además, a no ser de que se conozca bien cómo opera un RunLoop, es mejor usar solo el RunLoop del hilo principal (RunLoop.main).



Se puede usar el RunLoop para crear un timer con el método schedule(after:interval:tolerance:) que es ofrecido por Combine, en el protocolo Scheduler, y permite crear un temporizador. Este método devuelve una suscripción (Cancellable) que puede ser usada para cancelar el temporizador.




let runLoop = RunLoop.main
let subscription = runLoop.schedule(
after: runLoop.now,
interval: .seconds(1),
tolerance: .milliseconds(100)
) {
// Scheduler define varios métodos de bajo nivel, y uno que permite crear temporizadores cancelables.
print("Timer fired")
}
runLoop.schedule(after: .init(Date(timeIntervalSinceNow: 3.0))) {
print("Cancel timer")
subscription.cancel()
}









Clase Timer



Se puede crear un ConnectablePublisher de la clase Timer que agrega un evento a un RunLoop determinado, por medio del método estático publish(every:tolerance:on:in:options:):




let publisher = Timer.publish(every: 1.0, on: .main, in: .common)






El ConnectablePublisher es un tipo de Publisher que empieza a emitir eventos cuando se invoca el método connect() sobre él. Si se invoca autoconnect(), entonces el Publisher empieza a emitir tan pronto ocurre la primera suscripción.



Si el Publisher.Output del Timer es Date, entonces emitirá la fecha actual en cada evento. Para acoplar un acumulador/contador al Timer se puede usar el siguiente bloque de código, donde scan acumula valores en cada emisor del temporizador:




let subscription = Timer
.publish(every: 1.0, on: .main, in: .common)
.autoconnect()
.scan(0) { counter, _ in
counter + 1
}
.sink { ... }






El RunLoop no dejará de hacer su tarea inmediatamente para atender el Timer, así que por medio del parámetro tolerance se le especifica cuánto tiempo máximo se lo puede esperar antes de que atienda a nuestro temporizador.






DispatchQueue



La clase DispatchQueue, igual que RunLoop, también conforma el protocolo Scheduler así que también puede ejecutar una tarea de forma periódica con el método schedule(after:interval:tolerance:).




let queue = DispatchQueue.main
let cancellable = queue
.schedule(after: queue.now,
interval: .seconds(1)) {
print("Timer Fired")
}
queue.schedule(after: .init(.now() + .seconds(3))) {
print("Cancel timer")
cancellable.cancel()
}






Para que un Scheduler como DispatchQueue o RunLoop pueda emitir eventos, debemos usar un PassthroughSubject como pasamanos:




let source = PassthroughSubject<Int, Never>()
var counter = 0
let queue = DispatchQueue.main
let cancellable = queue
.schedule(after: queue.now,
interval: .seconds(1)) {
source.send(counter)
counter += 1
}
let subscription = source.sink { ... }












Cuestionario






1. ¿Por qué no se deben invocar métodos del RunLoop desde un hilo diferente al actual?






2. ¿Qué ventaja ofrece el método schedule(after:interval:tolerance:) del protocolo Scheduler en comparación con usar directamente un Timer?






3. Explica qué hace el método scan en el ejemplo del Timer.publish.






4. ¿Qué sucede si el RunLoop está ocupado cuando debe ejecutar un Timer y qué papel juega el parámetro tolerance?






5. ¿Cuál es la diferencia entre usar connect() y autoconnect() en un Timer.publish?






6. ¿Qué sucede cuando se llama a RunLoop.current dentro de un hilo nuevo?




  • [ ] Crea un nuevo RunLoop para el hilo

  • [ ] Devuelve el RunLoop del hilo principal

  • [ ] Lanza una excepción

  • [ ] Detiene la ejecución del hilo






7. ¿Qué tipo de objeto devuelve el método schedule de un RunLoop o DispatchQueue?




  • [ ] Un Timer

  • [ ] Un Subscription

  • [ ] Un Cancellable

  • [ ] Un ConnectablePublisher






8. En el ejemplo de Timer.publish, ¿qué tipo de valor emite el Publisher en cada evento?




  • [ ] Un número entero incremental

  • [ ] Una cadena con la hora

  • [ ] Un valor de tipo Date

  • [ ] Un valor de tipo TimeInterval






9. ¿Qué condición es necesaria para que un ConnectablePublisher empiece a emitir eventos?




  • [ ] Llamar a connect() o usar autoconnect()

  • [ ] Crear un RunLoop

  • [ ] Configurar una DispatchQueue

  • [ ] Agregar un PassthroughSubject






10. En el ejemplo con DispatchQueue, ¿por qué se usa un PassthroughSubject junto con el Scheduler?




  • [ ] Para convertir la cola en un Publisher que emita valores

  • [ ] Para cancelar automáticamente el temporizador

  • [ ] Para limitar la frecuencia de ejecución

  • [ ] Para evitar bloqueos del hilo principal









Solución






1. ¿Por qué no se deben invocar métodos del RunLoop desde un hilo diferente al actual?




No es thread-safe.







2. ¿Qué ventaja ofrece el método schedule(after:interval:tolerance:) del protocolo Scheduler en comparación con usar directamente un Timer?




schedule(after:interval:tolerance:) devuelve una suscripción que permite cancelar el temporizador.







3. Explica qué hace el método scan en el ejemplo del Timer.publish.




Acumula valores y los emite cada vez que recibe un Date emitido por Timer. Aparenta ser un contador entero ascendente en pasos de 1.







4. ¿Qué sucede si el RunLoop está ocupado cuando debe ejecutar un Timer y qué papel juega el parámetro tolerance?




El RunLoop va a terminar la tarea que está haciendo y luego ejecuta el método del Timer, y trata de respetar la tolerancia dada por el temporizador, a no ser que sea menor que la mínima tolerancia (minimumTolerance) del RunLoop.







5. ¿Cuál es la diferencia entre usar connect() y autoconnect() en un Timer.publish?




autoconnect() inicia el temporizador tan pronto ocurre la primera suscripción. connect() inicia el temporizador en ese momento.







6. ¿Qué sucede cuando se llama a RunLoop.current dentro de un hilo nuevo?




  • [✅] Crea un nuevo RunLoop para el hilo






7. ¿Qué tipo de objeto devuelve el método schedule de un RunLoop o DispatchQueue?




  • [✅] Un Cancellable






8. En el ejemplo de Timer.publish, ¿qué tipo de valor emite el Publisher en cada evento?




  • [✅] Un valor de tipo Date






9. ¿Qué condición es necesaria para que un ConnectablePublisher empiece a emitir eventos?




  • [✅] Llamar a connect() o usar autoconnect()






10. En el ejemplo con DispatchQueue, ¿por qué se usa un PassthroughSubject junto con el Scheduler?




  • [✅] Para convertir la cola en un Publisher que emita valores

1. Sofort-Triage & Abwehrmaßnahmen

SOC Incident Playbook: Remote Code Execution (RCE) Defense
Syntax validiert (0 Fehler)
title: Detect Exploitation - Combine #11: Temporizadores
id: cb8817be-df86-4073-b978-97436b17a6d0
status: experimental
description: Automatisch generierte SIEM-Erkennungsregel basierend auf CTI Intelligence
references:
  - https://tsecurity.de/
author: iShareStuff CTI Automated Detection Engine
date: 2026-09-26
logsource:
  category: network_connection
  product: any
detection:
  selection:
      CommandLine|contains:
        - 'exploit'
  condition: selection
falsepositives:
  - Legitime administrative Zugriffe oder Penetrationstests
level: high
tags:
  - attack.initial_access
Syntax validiert (0 Fehler)
rule CTI_Threat_Indicator {
    meta:
        author = "iShareStuff CTI Automated Detection Engine"
        date = "2026-09-26"
        description = "YARA Signature for "
    strings:
        $str = "Combine #11: Temporizadores" ascii wide
    condition:
        any of them
}
Syntax validiert (0 Fehler)
index=security sourcetype IN ("cisco:asa", "pan:traffic", "zeek_conn", "suricata", "WinEventLog:Security")
("Combine 11 Temporizadores")
| stats count earliest(_time) as first_seen latest(_time) as last_seen by src_ip, dest_ip, dest_host, signature
| eval first_seen=strftime(first_seen, "%Y-%m-%d %H:%M:%S"), last_seen=strftime(last_seen, "%Y-%m-%d %H:%M:%S")
| sort - count
Syntax validiert (0 Fehler)
message: "*Combine 11 Temporizadores*"
Syntax validiert (0 Fehler)
CommonSecurityLog
| where Message has "Combine 11 Temporizadores"
| summarize EventCount = count(), FirstSeen = min(TimeGenerated), LastSeen = max(TimeGenerated) by SourceIP, DestinationIP, DestinationPort, Activity
| extend DetectionRule = "iShareStuff-CTI-Compiled"
| sort by EventCount desc

2. Cyber Threat Intelligence & Forensik

🎯
MITRE ATT&CK Matrix Navigator 14 Taktiken
Reconnaissance
-
Resource Development
-
Initial Access
Execution
Persistence
-
Privilege Escalation
Defense Evasion
Credential Access
-
Discovery
-
Lateral Movement
-
Collection
-
Command and Control
Exfiltration
-
Impact
tsecurity.de Cognitive Threat RAG
Fokus-Vektor:

Kognitive Analyse für identifizierte Bedrohung: Erhöhte Bedrohungslage im Bereich Combine #11: Temporizadores.... Basierend auf 368k Vektor-Korrelationen werden sofortige Isolationsmaßnahmen für betroffene Endpunkte empfohlen.

🛡️ Angriffsfläche & Exposure

Netzwerk/Remote-Zugriff ohne Vorauthentifizierung möglich.

⚡ Empfohlene Sofortmaßnahmen
  • 1. Perimeter-Inspektion: Relevante Portfreigaben und exponierte Endpunkte unverzüglich scannen.
  • 2. Patch-Applikation: Hersteller-Hotfix einspielen oder betroffene Daemons in isolierte DMZ-Segmente überführen.
  • 3. Telemetrie & EDR-Alerts: Prozessaufrufe und Child-Processes auf anomale Shell-Spawns überwachen.
🔗 Semantisch verwandte Zero-Days MariaDB 11.7 VEC
Ähnliche Beiträge
🔍 Verwandte News

Auch interessante Nachrichten Combine #11: Temporizadores

Thematisch verwandte Begriffe: Combine, Temporizadores · 6 Treffer

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Zum Aktualisieren ziehen
ZERO-DAY CVE-2026-100503 | Ghidra versions through 12.1.4 contain a heap use-after-free vulnerabil…
Advisory →
tsecurity.de Icon
Offline-Lesen, Eilmeldungen & 0ms Ladezeit

Installiere tsecurity.de direkt auf deinen Home-Bildschirm für das ultimative Vollbild-Magazinerlebnis ohne Browser-Leisten.

Nächster Beitrag