void MainWindow::on_novaOperacao_clicked()
{
    LeitoraCartaoDialog d;
    if (d.exec() == QDialog::Rejected)
        return;

    Cartao c(d.id());

    bool ok;
    double value;
    while (true) {
        value = QInputDialog::getDouble(this, "Digite o Valor", "Valor:", 0, 0, 1000000, 2, &ok);
        if (!ok)
            return;

        if (value <= 0) {
            QMessageBox::critical(this, "Debitar", trUtf8("O valor não pode ser ZERO."));
        } else {
            break;
        }
    }

    if (c.creditos() - value < 0) {
        QMessageBox::critical(this, "Debitar", trUtf8("Saldo insuficiente!"));
        return;
    }

    Operacao(c, Operacao::Debito, value, QDateTime::currentDateTime().toTime_t()).salvar();

    atualizarUltimasOperacoes();
}
Example #2
0
// função chamada pelo processo no escalonamento 1 e 2
void FCFS_SJF(int id, float dt, float deadline) {
	struct timeval inicioProcesso;
	float tempoFim;
	
	sem_wait(&semThread[id]);	// aguarda autorização do escalonador pra poder rodar

	if (debug) {
		fprintf(stderr, "Processo %s começou a usar a CPU.\n", tabelaProcessos[id].nome);
	}

	gettimeofday(&inicioProcesso, NULL);

	while ((tempoDesdeInicio(inicioProcesso) < dt) 
		&& (tempoDesdeInicio(inicio) < deadline)) {
			Operacao();
	}

	sem_post(&semCore); // libera Core

	if (debug) {
		fprintf(stderr, "Processo %s liberou a CPU.\n", tabelaProcessos[id].nome);
	}

	tempoFim = tempoDesdeInicio(inicio);

	fprintf(arqSaida, "%s %.3f %.3f\n", tabelaProcessos[id].nome, tempoFim, 
		tempoFim - tabelaProcessos[id].t0);

	if (debug) {
		fprintf(stderr, "[nome=%s tf=%.3f tr=%.3f terminou]\n", 
			tabelaProcessos[id].nome, tempoFim, tempoFim - tabelaProcessos[id].t0);
	}	
}
Example #3
0
// função chamada pelo processo no escalonamento 3
void SRTN(int id, float deadline) {
	struct timeval inicioProcesso;
	float tempoFim;
	int chegou; 

	while (tempoDesdeInicio(inicio) < deadline && tabelaProcessos[id].dt > 0) 
	{	
		sem_wait(&semThread[id]);
		
		if (debug) {
			fprintf(stderr, "Processo %s começou a usar a CPU.\n", tabelaProcessos[id].nome);
		}

		chegou = qtdadeChegaram; 

		gettimeofday(&inicioProcesso, NULL);	//define o tempo inicial a cada vez que 
												// eh escalonado

		// excedente de nós que chegaram mais recentemente é maior q zero ?
		while (qtdadeChegaram - chegou == 0 && 
			  tempoDesdeInicio(inicio) < deadline &&
			  tempoDesdeInicio(inicioProcesso) < tabelaProcessos[id].dt) 
		{
			Operacao();			
		}
		
		sem_wait(&mutexQueue);
		tabelaProcessos[id].dt -= tempoDesdeInicio(inicioProcesso); // define tempo restante
		sem_post(&mutexQueue);
		
		sem_post(&semCore);

		if (debug) {
			fprintf(stderr, "Processo %s liberou a CPU.\n", tabelaProcessos[id].nome);
		}

		if (tempoDesdeInicio(inicio) < deadline && tabelaProcessos[id].dt > 0){
			mudancaContexto++;
		}
		
		sem_post(&semTroca); // sinaliza pro escalonador que pode escalonar o 
							//  próximo da fila (a inserção ja ordena)  => mudei pra baixo
						
	}
	
	tempoFim = tempoDesdeInicio(inicio);

	fprintf(arqSaida, "%s %.3f %.3f\n", tabelaProcessos[id].nome, tempoFim, 
		tempoFim - tabelaProcessos[id].t0);

	if (debug) {
		fprintf(stderr, "[nome=%s tf=%.3f tr=%.3f terminou]\n", 
			tabelaProcessos[id].nome, tempoFim, tempoFim - tabelaProcessos[id].t0);
	}
}
void MainWindow::on_recarregar_clicked()
{
    LeitoraCartaoDialog d;
    if (d.exec() == QDialog::Rejected)
        return;

    Cartao c(d.id());

    bool ok;
    double value = QInputDialog::getDouble(this, "Digite o Valor", "Valor:", 0, 0, 1000000, 2, &ok);
    if (!ok)
        return;

    Operacao(c, Operacao::Recarga, value, QDateTime::currentDateTime().toTime_t()).salvar();

    atualizarUltimasOperacoes();
}
Example #5
0
// função chamada pelo processo no escalonamento 4
void RoundRobin(int id, float deadline) {
	struct timeval inicioProcesso;
	float tempoFim;
	
	do {
		sem_wait(&semThread[id]);

		if (debug) {
			fprintf(stderr, "Processo %s começou a usar a CPU.\n", tabelaProcessos[id].nome);
		}
	
		gettimeofday(&inicioProcesso, NULL);	//define o tempo inicial a cada vez que 
												// eh escalonado

		while ((tempoDesdeInicio(inicio) < deadline) &&
			  (tempoDesdeInicio(inicioProcesso) < tabelaProcessos[id].tempoRodada)) 
		{
			Operacao();					
		}
		
		sem_post(&semCore);

		if (debug) {
			fprintf(stderr, "Processo %s liberou a CPU.\n", tabelaProcessos[id].nome);
		}
	
	} while (tempoDesdeInicio(inicio) < deadline && tabelaProcessos[id].tempoRodada > 0);

	tempoFim = tempoDesdeInicio(inicio); // informação de saída

	fprintf(arqSaida, "%s %.3f %.3f\n", tabelaProcessos[id].nome, tempoFim, 
		tempoFim - tabelaProcessos[id].t0);

	if (debug) {
		fprintf(stderr, "[nome=%s tf=%.3f tr=%.3f terminou]\n", 
			tabelaProcessos[id].nome, tempoFim, tempoFim - tabelaProcessos[id].t0);
	}
}