Questa è una domanda correlata al concetto.
Sto scrivendo un programma che esegue il polling per gli avvisi su vari dispositivi, ci sono due diversi tipi di avvisi che ho bisogno di sondare, rossi e arance.
Il mio approccio consiste nel creare due thread, ognuno dei quali esegue il polling del proprio tipo di avvisi in modo indipendente. Ho pensato di utilizzare thread perché entrambe le funzioni di polling devono essere progettate per essere completamente indipendenti e avere intervalli di tempo diversi per l'esecuzione, ad esempio:
- Rosso: query API 3 volte, attende almeno 30 secondi tra i sondaggi (cerca di evitare i falsi positivi lasciandoli il tempo di svuotare prima di fare cose con gli avvisi)
- Arancione: molto passivo, sondare una volta, attendere 10 minuti, quindi eseguire nuovamente il sondaggio, confrontare e fare cose (lo stesso principio dei rossi)
Ecco la domanda:
Ogni fase dell'elaborazione degli avvisi viene gestita tramite più classi e vari metodi, ad esempio: chiamate alla classe APIQUERYCLASS DATAPROCESSINGCLASS (fare cose con gli avvisi) - > DATAPARSINGCLASS (fai cose con gli avvisi) - > ANALYSISCLASS (fai cose con gli avvisi) - > ESCALATIONCLASS e così via ...
Ogni thread avrà un oggetto APIQUERYCLASS che creerà altri oggetti dalla catena di classi e userà i metodi.
È un approccio "sano"? I thread saranno veramente indipendenti? C'è un modo migliore per farlo, se sì, come?
EDIT:
Grazie per le risposte ragazzi Per aggiungere un po 'più di chiarezza:
######Worker.h #######
// Worker.h is the top file where i'm thinking about creating the threads
#include "ToolName.h"
class Worker
{
RedHandler()
{
Tool t_red;
t_red.GetRedAlerts();
}
OrangeHandler() // exact same thing as RedHandler()
{
Tool t_orange;
t_orange......
}
}
##### ToolName.h #####
#include "Dataprocessing.h"
class Tool
{
GetRedAlerts()
{
// query API , if query result is OK
DataProcessing d;
d.ProcessData();
}
}
##### DataProcessing.h ######
#include "DataParser.h"
class DataProcessing
{
DoStuff()
{
....
}
}
La catena funziona praticamente in questo modo fino all'escalation in cui si interrompe (salvo eccezioni) e torna al polling in Worker.h Lo stesso identico esiste per gli avvisi Orange dato che la query API restituisce la stessa identica struttura di JSON.
E mi piacerebbe mettere RedHandler () e OrangeHandler () nei loro thread
Spero che questo chiarisca un po 'la mia domanda