唐岛湾海盗
2018-07-19 13:19
采纳率: 100%
浏览 2.2k

请问c++怎么让函数等待特定函数运行后再调用呢?

class Test
{
public:
void mouse(); //鼠标点击获取坐标
void getXY(Vector2 &p);//用户主动获取上次的坐标
}
调用的时候,
Test test;
test.mouse(); //然后鼠标操作
test.getXY(p); //主动获取,如果没点击完成,卡在这里等待。

如上。我试过了 关键段,互斥量,事件。。。都没成功。要么卡在getXY()上,不能鼠标操作。。要么直接getXY()已经运行完了,鼠标还没操作。。。。
求大神。。。

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

10条回答 默认 最新

  • chinarealone 2018-07-31 02:59
    已采纳

    可以回调函数解决。具体
    1. 设定回调函数,参数为getXY的方法指针
    2. 在mouse函数中(完成mouse操作后),调用1中的方法指针的方法

    如果mouse函数和getXY不具有顺序执行的特点,那就需要分别开启两个线程,并用Mutex和WaitForSingleObject实现同步操作。

    已采纳该答案
    打赏 评论
  • devmiao 2018-07-19 15:19
    打赏 评论
  • greatofdream 2018-07-19 15:59

    没看到具体实现代码,不太好判断什么问题
    想要等待的话写一个循环,直到满足条件,比如说鼠标点击,然后退出循环

    打赏 评论
  • 码的 2018-07-20 02:05

    C语言调用函数就是先定义并声明函数,之后再根据定义函数的格式调用。

    打赏 评论
  • AlbertS 2018-07-20 02:21

    可以查一下回调函数的相关概念,将后续需要执行的函数与将要执行的函数关联,待函数执行完成再调用后续的函数执行

    打赏 评论
  • hszyhszy 2018-07-20 03:21

    getXY()运行的时候,mouse()已经运行结束,即便鼠标点击也不会记录其坐标了。这种情况应该采用多线程吧,getXY()函数挂起,等待mouse()函数结束后再运行。

    打赏 评论
  • zhajinyi2321 2018-07-20 07:01

    可以考虑使用回调函数

    打赏 评论
  • 奋斗0011 2018-07-20 08:02

    可以使用变量,把旧的坐标先保存起来

    打赏 评论
  • 苦瓜93 2018-07-25 03:36

    Linux上的话可以试试信号量

    打赏 评论
  • sharperhuang 2018-08-10 04:43

    如果采用轮询模式,那么mouse()函数必须有鼠标点击动作才返回,然后调用getXY()去获取坐标。这种模式下程序就一直等在那里,如果还有其他工作的 话,需要放到一个单独的线程中去执行。
    建议采用事件触发模式,类似 OnMouseClick()
    {
    GetXY();
    }

    打赏 评论

相关推荐 更多相似问题