class Test
{
public:
void mouse(); //鼠标点击获取坐标
void getXY(Vector2 &p);//用户主动获取上次的坐标
}
调用的时候,
Test test;
test.mouse(); //然后鼠标操作
test.getXY(p); //主动获取,如果没点击完成,卡在这里等待。
如上。我试过了 关键段,互斥量,事件。。。都没成功。要么卡在getXY()上,不能鼠标操作。。要么直接getXY()已经运行完了,鼠标还没操作。。。。
求大神。。。
可以回调函数解决。具体
1. 设定回调函数,参数为getXY的方法指针
2. 在mouse函数中(完成mouse操作后),调用1中的方法指针的方法
如果mouse函数和getXY不具有顺序执行的特点,那就需要分别开启两个线程,并用Mutex和WaitForSingleObject实现同步操作。
https://zhidao.baidu.com/question/1864407399046709067.html
没看到具体实现代码,不太好判断什么问题
想要等待的话写一个循环,直到满足条件,比如说鼠标点击,然后退出循环
C语言调用函数就是先定义并声明函数,之后再根据定义函数的格式调用。
可以查一下回调函数的相关概念,将后续需要执行的函数与将要执行的函数关联,待函数执行完成再调用后续的函数执行
getXY()运行的时候,mouse()已经运行结束,即便鼠标点击也不会记录其坐标了。这种情况应该采用多线程吧,getXY()函数挂起,等待mouse()函数结束后再运行。
可以考虑使用回调函数
可以使用变量,把旧的坐标先保存起来
Linux上的话可以试试信号量
如果采用轮询模式,那么mouse()函数必须有鼠标点击动作才返回,然后调用getXY()去获取坐标。这种模式下程序就一直等在那里,如果还有其他工作的 话,需要放到一个单独的线程中去执行。
建议采用事件触发模式,类似 OnMouseClick()
{
GetXY();
}