读取GPS数据的两种方法 2Gpsapi

本文介绍了一种使用Gpsapi进行GPS数据读取的方法,包括建立驱动连接、获取位置信息和关闭连接的具体步骤。通过创建事件句柄监听新位置信息和设备状态变化,并利用线程和等待多个对象的方法实现对GPS数据的高效处理。

读取GPS数据的两种方法 2Gpsapi - [技术]

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://memset.blogbus.com/logs/17801811.html

方法2Gpsapi

1 .建立和驱动的连接
HANDLE GPSOpenDevice(
  HANDLE       hNewLocationData, 事件句柄,有新的gps位置信息时驱动通知已经设定的事件
  HANDLE       hDeviceStateChange, 事件句柄,设备状态改变时驱动通知已经设定的事件
  const WCHAR *szDeviceName, 保留,设为NULL
  DWORD        dwFlags  保留,设为0
);
2.GPSGetPosition() 返回位置信息,包括经度,纬度等 3. GPSCloseDevice () 断开与gps驱动连接

GPSOpenDevice()

CreateThread()

WaitForMultipleObjects()

GPSGetPosition()

SetTimer()

end

1有新的gps位置信息

 

CreateEvent()

CreateEvent()

2设备状态改变

 

3线程结束

 

CreateEvent()

GPSGetDeviceState()

线程结束

事件

 
           

 

                        

 

 

 s_hNewLocationData = CreateEvent(NULL, FALSE, FALSE, NULL);       

s_hDeviceStateChange = CreateEvent(NULL, FALSE, FALSE, NULL);    

s_hExitThread = CreateEvent(NULL, FALSE, FALSE, NULL);               

m_hThread = CreateThread(NULL, NULL, GPSThreadProc, NULL, NULL, &m_dwThreadID);  

GPSOpenDevice(s_hNewLocationData,        s_hDeviceStateChange,        NULL,        NULL);

//开始读取数据线程:

DWORD  CGPSController::GPSThreadProc(__opt LPVOID lpParameter)

 GPS_POSITION gps_Position = {0};
 DWORD nowTime = 0;
 DWORD dwRet = 0;
 //GPS_DEVICE gps_Device = {0};
 HANDLE gpsHandles[GPS_CONTROLLER_EVENT_COUNT] = {s_hNewLocationData, s_hDeviceStateChange, s_hExitThread };

 gps_Position.dwSize = sizeof(gps_Position);
 gps_Position.dwVersion = GPS_VERSION_1;

 /*gps_Device.dwVersion = GPS_VERSION_1;
 gps_Device.dwSize = sizeof(gps_Device); */ 
 
 while (1)
 {    
  dwRet = WaitForMultipleObjects(GPS_CONTROLLER_EVENT_COUNT, gpsHandles, FALSE, 100);//INFINITE  
  switch(dwRet)
  {
  case WAIT_OBJECT_0://有数据
    dwRet = GPSGetPosition(s_hGPS_Device, &gps_Position, MAX_AGE, 0);
   
break;
  case WAIT_OBJECT_0 + 1://设备状态变化    
    break;
  case WAIT_OBJECT_0 + 2://结束线程事件
    return 1;
        default:
    break;
  }  
  Sleep(g_GPSpacing);  
 }
 return 0;
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值