我对 c++ Gui 完全陌生。我正在尝试制作一个简单的窗口表单来利用我的餐饮哲学家信号量解决方案
我的信号量头文件
ref class sema4
{
private:
int sem_value;
queue Waiting_List;
public:
sema4();
void wait(HANDLE h);
void signal();
};
我的信号量 cpp
sema4::sema4()
{
sem_value=1;
}
//suspend the thread
void sema4::wait(HANDLE h)
{
sem_value = sem_value - 1;
if (sem_value < 0)
{
Waiting_List.enqueue(h);
SuspendThread(h);
}
}
//Resume the thread
void sema4::signal()
{
sem_value = sem_value + 1;
if (sem_value <= 0)
{
ResumeThread(Waiting_List.dequeue());
}
}
我的队列头文件
ref class queue
{
private:
HANDLE list[20];
int front;
int rear;
public:
queue();
void enqueue(HANDLE x);
HANDLE dequeue();
bool isempty();
bool isfull();
};
队列 CPP
queue::queue()
{
front=-1;
rear=-1;
}
void queue::enqueue(HANDLE x)
{
if(isfull())
{
cout<<"queue is full";
}
else
{
if(front==-1)
front=0;
rear=(rear+1)%20;
list[rear]=x;
}
}
bool queue::isfull(){
if (front==(rear+1)%20)
return true;
return false;
}
HANDLE queue::dequeue(){
if(isempty())
{
cout<<"queue is empty";
return NULL;
}
else
{
HANDLE x =alist[front];
if (front==rear)
front=rear=-1;
else front = (front + 1) % 20;
}
}
bool queue::isempty()
{
if((front == rear) && (rear == -1))
{
return true;
}
return false;
}
我不断收到错误 C4368:无法将“列表”定义为托管“队列”的成员:不支持混合类型,并且我没有使用 C++ Windows 窗体的实际经验