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(); }
// 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); } }
// 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(); }
// 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); } }