如何在单独的类函数c ++

时间:2017-04-15 23:05:59

标签: multithreading visual-c++

我正在为一堂课做最后的项目。这个项目是模仿多个atm的。那是我的程序已经运行。在我的main.cpp里面,我创建了线程,现在只有两个,稍后可能更多,他们调用一个类开始rand()如果客户要进行存款或取款然后rand()他们是打算使用并做5次。

#include "ATM.h"

void main()
{   

  Begin test1;

  test1.manager();

  thread first(&Begin::atm, test1);

  thread second(&Begin::atm, test1);

  first.join();
  second.join();

  delete resbox::cashbox;

  system("pause");
}

我无法弄清楚如何在我的observe()函数中挂起我在Main.cpp中创建的线程,如下所示:

    void watcher::observe()
{
    float cash;
    if (resbox::cashbox->gettotal() >= resbox::cashbox->getmax())
    {
        //suspend all other threads

        cout << "Please empty cash box it is full! with $"<< resbox::cashbox->gettotal() << endl;
        cout << "How much would like to withdraw?" << endl;
        cin >> cash;
        resbox::cashbox->cashwd(cash);
        cout << "This is the amount in the reserve box now is $" << resbox::cashbox->gettotal() << endl;

        //resume all other threads
    }
    if (resbox::cashbox->gettotal() <= 500)
    {
        //suspend all other threads
        cout << "Please fill cashbox it is low, has $" << resbox::cashbox->gettotal() << endl;
        cout << "How much would like to add?" << endl;
        cin >> cash;
        resbox::cashbox->cashdp(cash);
        cout << "This is the amount in the reserve box now $" << resbox::cashbox->gettotal() << endl;

        //resume all other threads

    }
}

每当满足其中一个if语句的条件时,我需要能够挂起除满足条件的当前线程之外的所有其他线程。然后在数据完成之后离开if语句并且观察者函数恢复所有其他线程。

我从这里读到了使用SuspendThread和ResumeThread how to suspend thread的可能性。然而,我很难将main.cpp中创建的线程传递给观察者函数,以便我可以调用这些函数。我想出了如何从cplusplus.com创建线程,我还注意到我可能会使用What is the best solution to pause and resume pthreads?所指的互斥锁定

我在Microsoft Visual Studio 2015社区中使用c ++。

这是我第一次处理线程。对于我的使用哪个更好,将创建的线程传递给观察者函数,还是有另一个暂停/暂停然后恢复它们,我将如何这样做?感谢您提供的任何建议/帮助。

目前如果我运行我的程序并且其中一个条件被一个线程满足,另一个线程也将满足相同的条件,我必须在线程继续之前输入两次存款/取款金额,直到每个线程处理完毕共有5位客户,共有10位客户。

1 个答案:

答案 0 :(得分:0)

我终于想出了我需要什么以及使用什么,这要归功于: Class RWLock

在我的项目中使用这个类。然后创建该类的全局实例。

然后我添加了读取器和写入器锁定并解锁了它在我的代码中最好的功能。像这样:

class Machine {
    public void start(){    
        System.out.println("Machine Started");
    }
}

class Camera extends Machine {
    public void start(){         
        System.out.println("Camera Started");
    }
    public void snap(){
        System.out.println("Photo taken");
    }
}

public class UpdownCasting {
    public static void main(String[] args) {
        Machine machine1 = new Machine;
        Camera camera1 = new Camera; 
    }

}