示例#1
0
    def _produzir(self):
        while True:
            if win32event.WaitForSingleObject(
                    self.mutex,
                    1) == 0:  # Permite que apenas um produtor produza por vez
                if win32event.WaitForSingleObject(
                        self.cheio, 1
                ) == 0:  # Verifica se o semáforo não está cheio para poder produzir
                    aux1 = self.armazem.read().decode()
                    aux2 = ''
                    for i in aux1:
                        if not i == '\x00':
                            aux2 += i
                    aux2 = int(aux2)
                    aux2 += 1

                    while (self.armazem.tell() < self.limite_producao):
                        self.armazem.write_byte(0)
                    self.armazem.seek(0)
                    self.armazem.write(str(aux2).encode())
                    self.armazem.seek(0)

                    if aux2 == self.limite_producao:
                        try:
                            win32event.ReleaseSemaphore(
                                self.vazio, 1
                            )  # Libera o semáforo, informando que o armazém não está vazio
                        except:
                            pass
                        win32event.ReleaseSemaphore(self.mutex,
                                                    1)  # Libera o mutex
                    else:
                        win32event.ReleaseSemaphore(
                            self.cheio, 1
                        )  # Libera o semáforo, informando que o armazém não está cheio
                        try:
                            win32event.ReleaseSemaphore(
                                self.vazio, 1
                            )  # Libera o semáforo, informando que o armazém não está vazio
                        except:
                            pass
                        win32event.ReleaseSemaphore(self.mutex,
                                                    1)  # Libera o mutex
                        aux3 = ''
                        for _ in range(aux2):
                            aux3 += '| X '
                        print("PID {} informa: produzindo... {}| Total: {}".
                              format(str(os.getpid()), aux3, str(aux2)))

                    self._sleep()
                else:
                    print('PID {} informa: Armazém cheio...'.format(
                        str(os.getpid())))
                    win32event.ReleaseSemaphore(self.mutex,
                                                1)  # Libera o mutex
                    self._sleep()
            else:
                self._sleep()
示例#2
0
def Command(code, dict):
    py.eeger.CMD = code
    py.eeger.CMDRESP = 0
    py.interface = dict
    logger('in command %d' % code)
    #print dict
    while 1:
        win32event.ReleaseSemaphore(py.sema1, 1)  # let command processor run
        logger('Released sema1')
        while 1:
            if code == PYRun or code == PYReplay:
                time.sleep(1.0)
            else:
                time.sleep(0.1)
            if py.eeger.CMDRESP:
                break
        # if win32event.WaitForSingleObject(py.sema,win32event.INFINITE)
        # if py.eeger.DICTQ != 0:
        #     handle_dictq()
        # else:
        logger('outa command %d' % py.eeger.CMDRESP)
        return py.eeger.CMDRESP
 def windows_release_semaphore(sem):
     win32event.ReleaseSemaphore(sem, 1)
示例#4
0
 def dictcb(self):
     win32event.WaitForSingleObject(self.sema2, win32event.INFINITE)
     self.queries += 1
     qthread(1, 2)
     win32event.ReleaseSemaphore(self.sema2, 1)