Добрый день!
Скажите пожалуйста, можно ли использовать из другого(не основного) потока методы работы с матрицей высот из mapapi с одновременной отрисовкой на карте?
Сейчас при загрузке матрицы высот, отображении ее на карте и обращении к ней для получения высоты по координатам в другом потоке на карте начинают появляться белые квадратики, а после программа падает при обновлении карты со следующим стеком:
0 rscGetObjBotValue(TMapRsc *, int) 0x7ffff5ddce99
1 TMapControl::CheckViewObject(FVSPR&, TMap&, TMapRsc&) 0x7ffff5e0f667
2 TMapControl::ShowList(TMap&, int, TMapSelect&, DFRAME *) 0x7ffff5e10952
3 TMapControl::ShowMap(TMap&, TMapSelect&, int) 0x7ffff5e10f27
4 TMapControl::ShowSituationPlace(int, int) 0x7ffff5f56a82
5 TMapControl::ShowData() 0x7ffff5d773e0
6 TMapPaint::PaintToDib(unsigned long, int, _RECT&, TObjectInfo *, int, int, TMapSelect *) 0x7ffff5db9d99
7 TMapPaint::Paint(unsigned long, int, _RECT&) 0x7ffff5dba5e0
8 TMapAccess::Paint95(unsigned long, int, _RECT&, int) 0x7ffff5d4df3c
9 mapPaint95Ex 0x7ffff5d95996
10 mapPaint95 0x7ffff5d959ab
11 TMapScreen::DrawMap(int, long, _RECT *, tagPOINT *, int) 0x7ffff5d97b3f
12 mapDrawImageMap 0x7ffff5d9976b
13 QDMapViewWindow::Repaint() 0x7ffff623029d
Код для работы с матрицей высот такой:
В основном потоке:
int number = mapOpenMtrForMap(this->m_mapView->GetMapHandle(), mtwFile, GENERIC_READ);
mapSetMtrView(m_mapView->GetMapHandle(), number, 0);
mapSetMtrView(m_mapView->GetMapHandle(), number, 3);
В рабочем потоке:
if(mapHeightValuePresence(m_mapView->GetMapHandle(), nullptr))
{
double height = mapGetHeightValue(m_mapView->GetMapHandle(), planePoint.x(), planePoint.y());
}
В случае, же если матрица не отображается на экране mapSetMtrView(m_mapView->GetMapHandle(), number, 0), то все работает нормально.
Скажите пожалуйста, можно ли использовать из другого(не основного) потока методы работы с матрицей высот из mapapi с одновременной отрисовкой на карте?
Сейчас при загрузке матрицы высот, отображении ее на карте и обращении к ней для получения высоты по координатам в другом потоке на карте начинают появляться белые квадратики, а после программа падает при обновлении карты со следующим стеком:
0 rscGetObjBotValue(TMapRsc *, int) 0x7ffff5ddce99
1 TMapControl::CheckViewObject(FVSPR&, TMap&, TMapRsc&) 0x7ffff5e0f667
2 TMapControl::ShowList(TMap&, int, TMapSelect&, DFRAME *) 0x7ffff5e10952
3 TMapControl::ShowMap(TMap&, TMapSelect&, int) 0x7ffff5e10f27
4 TMapControl::ShowSituationPlace(int, int) 0x7ffff5f56a82
5 TMapControl::ShowData() 0x7ffff5d773e0
6 TMapPaint::PaintToDib(unsigned long, int, _RECT&, TObjectInfo *, int, int, TMapSelect *) 0x7ffff5db9d99
7 TMapPaint::Paint(unsigned long, int, _RECT&) 0x7ffff5dba5e0
8 TMapAccess::Paint95(unsigned long, int, _RECT&, int) 0x7ffff5d4df3c
9 mapPaint95Ex 0x7ffff5d95996
10 mapPaint95 0x7ffff5d959ab
11 TMapScreen::DrawMap(int, long, _RECT *, tagPOINT *, int) 0x7ffff5d97b3f
12 mapDrawImageMap 0x7ffff5d9976b
13 QDMapViewWindow::Repaint() 0x7ffff623029d
Код для работы с матрицей высот такой:
В основном потоке:
int number = mapOpenMtrForMap(this->m_mapView->GetMapHandle(), mtwFile, GENERIC_READ);
mapSetMtrView(m_mapView->GetMapHandle(), number, 0);
mapSetMtrView(m_mapView->GetMapHandle(), number, 3);
В рабочем потоке:
if(mapHeightValuePresence(m_mapView->GetMapHandle(), nullptr))
{
double height = mapGetHeightValue(m_mapView->GetMapHandle(), planePoint.x(), planePoint.y());
}
В случае, же если матрица не отображается на экране mapSetMtrView(m_mapView->GetMapHandle(), number, 0), то все работает нормально.