读取GPS数据的两种方法 2Gpsapi - [技术]
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://memset.blogbus.com/logs/17801811.html
方法2:Gpsapi
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;
}
本文介绍了一种使用Gpsapi进行GPS数据读取的方法,包括建立驱动连接、获取位置信息和关闭连接的具体步骤。通过创建事件句柄监听新位置信息和设备状态变化,并利用线程和等待多个对象的方法实现对GPS数据的高效处理。
3732

被折叠的 条评论
为什么被折叠?



