You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdemultimedia/mpeglib/lib/decoder/commandPipe.h

79 lines
1.3 KiB

/*
thread safe fifo queue for commands
Copyright (C) 2000 Martin Vogt
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Library General Public License as published by
the Free Software Foundation.
For more information look at the file COPYRIGHT in this package
*/
#ifndef __COMMAND_PIPE_H
#define __COMMAND_PIPE_H
#include "command.h"
/**
This queue deals with the ugly deadlock problem.
We insert all commands in a queue and the thread
polls this queue for next commands.
*/
class CommandPipe {
Command** commandArray;
int entries;
int readPos;
int writePos;
abs_thread_mutex_t pipeMut;
abs_thread_cond_t spaceCond;
abs_thread_cond_t emptyCond;
abs_thread_cond_t dataCond;
public:
CommandPipe();
~CommandPipe();
// writer thread:
void sendCommand(Command& cmd);
void sendCommandNoWait(Command& cmd);
void waitForEmptyQueue();
// reader thread
int hasCommand(Command* dest);
void waitForCommand();
private:
void sendCommand(Command& cmd,int lWait);
void lockCommandPipe();
void unlockCommandPipe();
// writer thread wait here
void waitForSpace();
void waitForEmpty();
void waitForData();
// reader thread signals this
void signalSpace();
void signalEmpty();
void signalData();
};
#endif