openlayers 怎么让一个变量追踪一个函数的shell 执行变量命令过程

&&国之画&&&&&&
版权所有 京ICP备号-2
迷上了代码!2557人阅读
Geoserver&OpenLayers系列(46)
之前的文章讲到了如何构建空间数据库,矢量数据如何入库,如何构建拓扑网络,如何自定义查询函数,如何构建wms服务,本文讲解如何基于openlayers晚上最短路径规划功能。
一、基于openlayers3
1.构建网页,这里只是一个简单的网页
&!DOCTYPE html&
&html lang='en'&
&meta charset='utf-8'/&
&title&indoornavigation&/title&
&script type='text/javascript' src='ol-debug.js'&&/script&
&script type='text/javascript' src='closure/goog/base.js'&&/script&
&script type = 'text/javascript' src='mapinit.js'&&/script&
&script type='text/javascript' src='mapclick.js'&&/script&
&body onload='init();'&
&div style=&position: top: 50 left: 80 width: 300 height: 100&&
&button id=&clear&&路径清除&/button&
&div id='map_element' style='width:1800height:800'&&/div&
2.初始化函数
var startP
var vectorL
function init()
//定义地图边界
var extent= [300, 700, 400, 900];
var layers=[
new ol.layer.Tile({
source:new ol.source.TileWMS({
url:'http://10.16.35.14:8080/geoserver/tingchechang/wms',
'LAYERS':'tingchechang:minidata',
'TILED':true
serverType:'geoserver'
map=new ol.Map({
layers:layers,
target:'map_element',
view:new ol.View({
projection:new ol.proj.Projection({
code:'EPSG:;,
units:ol.proj.Units.METERS
center:[9571],
extent:extent,
controls: ol.control.defaults({
attributionOptions: {
collapsible: false
// The &start& and &destination& features.
startPoint = new ol.Feature();
destPoint = new ol.Feature();
// The vector layer used to display the &start& and &destination& features.
vectorLayer = new ol.layer.Vector({
source: new ol.source.Vector({
features: [startPoint, destPoint]
style:new ol.style.Style({
image:new ol.style.Icon(({
size:[24,36],
anchor:[0.5,0.75],
anchorXUnits:'fraction',
anchorYUnits:'fraction',
src:'marker.png'
map.addLayer(vectorLayer);
//添加比例尺,单位m
var scaleLineControl=new ol.control.ScaleLine();
scaleLineControl.setUnits(ol.control.ScaleLineUnits.METRIC);
map.addControl(scaleLineControl);
//缩放工具条
var zoomSilder=new ol.control.ZoomSlider();
map.addControl(zoomSilder);
map.on('click', clickMap);
//清空路径规划结果
var clearButton = document.getElementById('clear');
clearButton.addEventListener('click', function(event) {
// Reset the &start& and &destination& features.
startPoint.setGeometry(null);
destPoint.setGeometry(null);
// Remove the result layer.
map.removeLayer(result);
3.单击添加起点终点marker及路径规划函数
var params = {
LAYERS: 'tingchechang:tingchechang',
FORMAT: 'image/png'
function clickMap(event)
if (startPoint.getGeometry() == null) {
// First click.
startPoint.setGeometry(new ol.geom.Point(event.coordinate));(event.coordinate);
} else if (destPoint.getGeometry() == null) {
// Second click.
destPoint.setGeometry(new ol.geom.Point(event.coordinate));
// Transform the coordinates from the map projection (EPSG:3857)
// to the server projection (EPSG:4326).
var startCoord = (startPoint.getGeometry().getCoordinates());
var destCoord = (destPoint.getGeometry().getCoordinates());
var viewparams = [
'x1:' + startCoord[0], 'y1:' + startCoord[1],
'x2:' + destCoord[0], 'y2:' + destCoord[1]
//'x1:' + 9, 'y1:' + 7,
//'x2:' + 5, 'y2:' + 9
params.viewparams = viewparams.join(';');
result = new ol.layer.Image({
source: new ol.source.ImageWMS({
url:'http://10.16.35.14:8080/geoserver/tingchechang/wms',
params: params
map.addLayer(result);
二、基于openlayers2
1.构建网页
&!DOCTYPE html&
&html lang='en' &
&meta charset='utf-8'/&
&title&Indoor Navigation&/title&
&script type='text/javascript' src='OpenLayers.js'&&/script&
&script type = 'text/javascript' src='mapinit.js'&&/script&
&script type = 'text/javascript' src='mapClick.js'&&/script&
&body onload='init();'&
&div style=&position: top: 50 left: 80 width: 300 height: 100&&
&button id=&clear&&路径清除&/button&
&div id='map_element' style='width:1800height:800'&&/div&
2.初始化函数、
var points,
var startP
var markerL
function init() {
//定义地图边界
var bounds= new OpenLayers.Bounds(0....000448);
var options = {
projection: &EPSG:4326&,
center: new OpenLayers.LonLat(0.005,-0.0002),
map = new OpenLayers.Map('map_element',options);
var baseLayer = new OpenLayers.Layer.WMS(&OpenLayers WMS&,
//geoserver所在服务器地址
'http://10.16.35.14:8080/geoserver/navigation/wms',
layers: 'navigation:road'
minScale: 545000
map.addLayer(baseLayer);
//添加control空间
// map.addControl(new OpenLayers.Control.LayerSwitcher());
map.addControl(new OpenLayers.Control.MousePosition());
map.addControl(new OpenLayers.Control.ScaleLine());
map.addControl(new OpenLayers.Control.Scale);
map.zoomToExtent(bounds);
// The vector layer used to display the &start& and &destination& features.
markerLayer = new OpenLayers.Layer.Markers(&markers&);
map.addLayer(markerLayer);
var size = new OpenLayers.Size(21,25);
var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);
icon = new OpenLayers.Icon('marker.png',size,offset);
//清空路径规划结果
var clearButton = document.getElementById('clear');
clearButton.addEventListener('click', function(event) {
// Reset the &start& and &destination& features.
startPointSet =
endPointSet =
// Remove the result layer.
markerLayer.removeMarker(startPoint);
markerLayer.removeMarker(destPoint);
startPoint.destroy();
destPoint.destroy();
map.removeLayer(result);
map.events.register('click', map, onMapClick);
3.单击添加起点终点marker及路径规划函数
var startPointSet =
var endPointSet =
var startC
var destCoord
function onMapClick(event)
// 显示地图屏幕坐标
if (!startPointSet) {
var lonlat = map.getLonLatFromPixel(event.xy);
startPoint = new OpenLayers.Marker(lonlat);
markerLayer.addMarker(startPoint);
startCoord = new OpenLayers.Geometry.Point(lonlat.lon,lonlat.lat);
startPointSet =
else if (!endPointSet) {
// Second click.
var lonlat = map.getLonLatFromPixel(event.xy);
destPoint = new OpenLayers.Marker(lonlat);
markerLayer.addMarker(destPoint);
destCoord = new OpenLayers.Geometry.Point(lonlat.lon,lonlat.lat);
endPointSet =
// Transform the coordinates from the map projection (EPSG:3857)
// to the server projection (EPSG:4326).
var viewparams = [
'x1:' + startCoord.x, 'y1:' + startCoord.y,
'x2:' + destCoord.x, 'y2:' + destCoord.y
// 'x1:' + 9, 'y1:' + 7,
// 'x2:' + 5, 'y2:' + 9
viewparams = viewparams.join(';');
result = new OpenLayers.Layer.WMS(&resLayer&,
'http://localhost:8080/geoserver/navigation/wms',
{ FORMAT: 'image/png8',
transparent: true,
LAYERS: 'navigation:resRoad',
viewparams:viewparams
{isBaseLayer:false,
opacity: 1,
map.addLayer(result);
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:798259次
积分:9637
积分:9637
排名:第1188名
原创:251篇
转载:57篇
评论:247条
文章:39篇
阅读:84948
文章:48篇
阅读:57614
文章:24篇
阅读:46699
(1)(1)(9)(2)(6)(1)(4)(6)(1)(3)(5)(4)(3)(7)(12)(11)(1)(14)(7)(1)(1)(5)(4)(39)(15)(5)(5)(10)(5)(8)(7)(2)(1)(7)(19)(29)(35)(2)(7)(1)(1)(2)
Makefile 学习2030人阅读
OpenLayers(5)
&OpenLayers.Util.getElement: 以数组的形式返回所有参数在document中的DOM元素 $: OpenLayers.Util.getElement的别名 OpenLayers.Util.extend(目标对象,原对象): 将原对象中的所有非“undefined”属性拷贝到目标对象(包括&toString&函数) OpenLayers.Util.removeItem: 从数组中移除所有指定的对象 OpenLayers.Util.clearArray: 数组长度置0,清除数组所有内容 OpenLayers.Util.indexOf: 查找元素在数组中第一次出现的位置,若找不到返回“-1” OpenLayers.Util.modifyDOMElement: 修改DOM元素属性。参数:1,DOM元素;2,新的id;3,左上角位置;4,宽带和高度;5,定位方式(绝对或相对);6,边界宽度;7,当对象的内容超过其指定高度及宽度时如何管理内容;8,透明度 OpenLayers.Util.createDiv: 创建DOM元素Div。参数:1,Div元素的id,若未指定则使用OpenLayers.Util.createUniqueID(&OpenLayersDiv&)创建一个;2,左上角位置;3,宽带和高度;4,imgUrl:背景图片URL;5,定位方式(绝对或相对);6,边界宽度;7,当对象的内容超过其指定高度及宽度时如何管理内容;8,透明度 OpenLayers.Util.createImage: 创建DOM元素Img。参数:1,img元素的id,若未指定则使用OpenLayers.Util.createUniqueID(&OpenLayersDiv&)创建一个;2,左上角位置;3,宽带和高度;4,imgUrl:图片URL;5,定位方式(绝对或相对);6,边界宽度;7,透明度;8,delayDisplay延迟显示,是否下载了图片后再显示 OpenLayers.Util.setOpacity: 设置DOM元素透明度 OpenLayers.Util.onImageLoad: 绑定到(由createImage或createAlphaImageDiv创建的)image加载事件,img元素加载完成后清除背景颜色将图片显示出来 OpenLayers.Util.onImageLoadError: 尝试指定次数(默认1次)仍未成功后将背景颜色设置为指定颜色(“pink”),将display设为“” OpenLayers.Util.alphaHack: 检测浏览器是否支持png图片透明 OpenLayers.Util.modifyAlphaImageDiv: 修改Div及其中img的属性。参数:1,要修改的DOM元素Div;2,新的id;3,左上角位置;4,div和img新的宽带和高度;5,imgUrl:Div中img新的URL;6,定位方式(绝对或相对);7,div中图片新的边界宽度;8,sizing:设置Div缩放属性;9,设置Div透明度 OpenLayers.Util.createAlphaImageDiv: 创建包含img的Div。1,id;2,左上角位置;3,div和img的宽带和高度;4,imgUrl:Div中img的URL;5,定位方式(绝对或相对);6,div中图片新边界宽度;7,sizing:设置Div缩放属性;8,设置Div透明度;9,delayDisplay延迟显示,是否下载了图片后再显示 OpenLayers.Util.upperCaseObject: 将数组的索引转化为大写(值不变) OpenLayers.Util.applyDefaults(目标对象,原对象): 将原对象中存在而目标对象中不存在的属性拷贝到目标对象中 OpenLayers.Util.getParameterString: 将数组转化为url参数部分(&连接)形式的字符串 OpenLayers.Util.getImagesLocation: 取存储img文件的相对路径 OpenLayers.Util.Try: 依次执行参数中的函数,当有一个成功执行后,便返回其结果 OpenLayers.Util.getNodes: 以数组的形式返回指定元素的所有子元素中nodeName为指定名字的所有元素。参数:1,P:待扫描的父元素;2,要比对的结点名称 OpenLayers.Util._getNodes: 返回一堆元素中nodeName为指定名称的所有元素 OpenLayers.Util.getTagText: 返回被扫描对象“parents”的第“index”个指定“item”结点名称的结点的第2个(如只有1个则是第1个)子结点的值 OpenLayers.Util.getXmlNodeValue: 依次尝试取值node.text,node.textcontent,node.firstchild.nodevalue OpenLayers.Util.mouseLeft(evt,div): 如果evt的对象或对象的祖先对象是div,则返回true OpenLayers.Util.rad: 由半径得到对应的1°弧长 OpenLayers.Util.distVincenty: 测量两点之间的距离。WGS-84坐标系是目前GPS所采用的坐标系统,GPS所发布的星历参数就是基于此坐标系统的。 WGS-84坐标系统的全称是World Geodical System-84(世界大地坐标系-84),它是一个地心地固坐标系统。WGS-84坐标系统由美国国防部制图局建立,于1987年取代了当时GPS所采用的坐标系统―WGS-72坐标系统而成为GPS的所使用的坐标系统。WGS-84坐标系的坐标原点位于地球的质心,Z轴指向BIH1984.0定义的协议地球极方向,X轴指向BIH1984.0的启始子午面和赤道的交点,Y轴与X轴和Z轴构成右手系。采用椭球参数为: a = 6378137m f = 1/298. OpenLayers.Util.getParameters: 提取url参数部分,并解析成数组的形式返回 OpenLayers.Util.getArgs: OpenLayers.Util.getParameters的别名,3.0版本中将移除 OpenLayers.Util.createUniqueID: 创建全局唯一的id。参数:prefix,id前缀,若未指定则为“id_” OpenLayers.Util.normalizeScale: 若参数大于1则返回其倒数,否则直接返回原参数 OpenLayers.Util.getResolutionFromScale: 由比例得分辨率 OpenLayers.Util.getScaleFromResolution: 由分辨率的比例 OpenLayers.Util.safeStopPropagation: 安全的停止事件传递,但没有防止浏览器默认动作。此函数已停用。改用OpenLayers.Event.stop(evt, true)。 OpenLayers.Util.pagePosition: 计算DOM元素在页面中的位置 OpenLayers.Util.isEquivalentUrl: 根据给定的参数options(默认ignoreCase,ignorePort80,ignoreHash)比对两个url是否等值 OpenLayers.Util.createUrlObject: 由url地址和options创建urlObject OpenLayers.Util.removeTail: 移除url地址在“?”和“#”之后的部分 OpenLayers.Util.getBrowserName: 检测浏览器名称 OpenLayers.Util.getRenderedDimensions: 计算要弹出内容要占用的空间大小 OpenLayers.Util.getScrollbarWidth: 取滚动条宽度
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:141991次
积分:1658
积分:1658
排名:第16965名
原创:12篇
转载:64篇
评论:14条
(1)(1)(1)(1)(2)(1)(1)(2)(1)(6)(3)(1)(9)(9)(34)(2)(1)(1)Openlayers进阶学习——多标注显示/点击弹出框/图层控制/搜索定位/新增标注等 - 博客频道 - CSDN.NET
有志者,事可成
——贵在坚持
一、多标注显示
1、多标注显示:通过Feature和Marker实现多点标注。
我对openlayers例子提供的代码做了一些改动,添加单个标注函数如下:
* Function: addMarker
* Add a new marker to the markers layer given the following lonlat,
popupClass, and popup contents HTML. Also allow specifying
whether or not to give the popup a close box.
* Parameters:
* ll - {&OpenLayers.LonLat&} Where to place the marker
* popupClass - {&OpenLayers.Class&} Which class of popup to bring up
when the marker is clicked.
* popupContentHTML - {String} What to put in the popup
* closeBox - {Boolean} Should popup have a close box?
* overflow - {Boolean} Let the popup overflow scrollbars?
function addMarker(markerName,icon,ll, popupClass, popupContentHTML, closeBox, overflow) {
var feature = new OpenLayers.Feature(markerName,ll,{icon:icon.clone()});
feature.closeBox = closeB
feature.popupClass = popupC
feature.data.popupContentHTML = popupContentHTML;
feature.data.overflow = (overflow) ? &auto& : &hidden&;
var marker = feature.createMarker();
var markerClick = function (evt) {
if (this.popup == null) {
this.popup = this.createPopup(this.closeBox);
this.popup.setBackgroundColor(&#E2E7EB&);
this.popup.setBorder(&1px #0066ff solid&);
map.addPopup(this.popup);
this.popup.show();
this.popup.toggle();
currentPopup = this.
OpenLayers.Event.stop(evt);
marker.events.register(&mousedown&, feature, markerClick);
markerName.addMarker(marker);
上诉函数中
if (this.popup == null) {
this.popup = this.createPopup(this.closeBox);
this.popup.setBackgroundColor(&#E2E7EB&);
this.popup.setBorder(&1px #0066ff solid&);
map.addPopup(this.popup);
this.popup.show();
this.popup.toggle();
currentPopup = this.
同时也实现了点击弹出框的效果,显示内容见下面。
2、调用上面函数实现多点标注,核心代码如下:
var url = 'gis/img/cctv.gif';
var sz = new OpenLayers.Size(20, 20);
//尺寸大小
var calculateOffset = function(size) {
return new OpenLayers.Pixel(-(size.w/2), -size.h);
var icon = new OpenLayers.Icon(url, sz, null, calculateOffset);
var lonLat,popupContentHTML,popupC
if(cctvList == null){
//遍历显示
for(var i=0;i&cctvList.i++){
lonLat = new OpenLayers.LonLat(cctvList[i].gis_x,cctvList[i].gis_y);
//google地图需要转换坐标
lonLat.transform(map.displayProjection, map.getProjectionObject());
device_name = cctvList[i].device_
//popupContentHTML = &&b&&&治安监控&br&&&&+device_name+&&/b&&;
popupContentHTML = createPopupContentHTML('治安监控',cctvList[i]);
popupClass = OpenLayers.Popup.A
addMarker(cctvMarkers,icon,lonLat, popupClass, popupContentHTML,true);
}其中cctvList是从数据库获取设备列表json格式;
createPopupContentHTML函数实现点击GIS标注弹出框显示内容;
cctvMarkers是定义的全局图层变量,用于多图层显示控制;
用户通过遍历将多个点在GIS上显示;
二、图层控制
通过定义全局Markers变量实现不同图层的显示控制。
预先定义几个变量,如:var cctvMarkers,tgsMarkers,epsM 每个变量表示一个图层,每个图层上的标注通过方法一实现添加即可;
在页面加载时把各图层的标注全部加载完毕,需要隐藏某一个图层则通过调用Markers.clearMarkers()方法清理掉该图层数据即可,待需要显示时再重新加载,即调用方法一即可。
//隐藏图层
function hiddenMarker(markerName){
if(markerName == 'cctv'){
cctvMarkers.clearMarkers();
}else if(markerName == 'tgs'){
tgsMarkers.clearMarkers();
epsMarkers.clearMarkers();
三、搜索定位
搜索定位其实首先是从数据库中根据关键字查找出符合的结果项,然后再将这些结果根据坐标在GIS上进行渲染标注,当点击某一结果是进行定位;
我这里定位的实现是通过marker标注的定位图片的方式实现,这样做有个问题就是定位marker会覆盖方法一中设备的点击弹出事件,我这里用了最笨的方法就是定位标注时重新注册点击弹出事件。关键代码如下:
//gis定位并居中
function deviceLocate(data){
//alert(data);
var url = 'jsp/gis/img/location.gif';
var sz = new OpenLayers.Size(25, 30);
//尺寸大小
var calculateOffset = function(size) {
return new OpenLayers.Pixel(-(size.w/2), -size.h);
var icon = new OpenLayers.Icon(url, sz, null, calculateOffset);
var lonLat = new OpenLayers.LonLat(locationDataList[data].gis_x,locationDataList[data].gis_y);
//google地图需要转换坐标
lonLat.transform(map.displayProjection, map.getProjectionObject());
locateMarkers.clearMarkers();
var popupContentHTML,popupC
var title = '设备信息';
if(locationDataList[data].device_type == '10'){
title = '卡口';
}else if(locationDataList[data].device_type == '11'){
title = '电警';
}else if(locationDataList[data].device_type == '12'){
title = '治安监控';
popupContentHTML = createPopupContentHTML(title,locationDataList[data]);
popupClass = OpenLayers.Popup.A
addMarker(locateMarkers,icon,lonLat, popupClass, popupContentHTML,true);
//locateMarkers.addMarker(new OpenLayers.Marker(lonLat, icon));
//居中显示
map.setCenter(lonLat, 4);
四、新增标注
在GIS上添加新标注只需获取相应的经纬度坐标,保存志数据库即可。
init方法里增加
//单击事件
var click = new OpenLayers.Control.Click();
map.addControl(click);
click.activate();单机获取坐标函数
//单击事件响应
OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, {
defaultHandlerOptions: {
'single': true,
'double': false,
'pixelTolerance': 0,
'stopSingle': false,
'stopDouble': false
initialize: function(options) {
this.handlerOptions = OpenLayers.Util.extend(
{}, this.defaultHandlerOptions
OpenLayers.Control.prototype.initialize.apply(
this, arguments
this.handler = new OpenLayers.Handler.Click(
'click': this.trigger
}, this.handlerOptions
trigger: function(e) {
markers.clearMarkers();
var url = 'gis/img/biaozhu.png';
var sz = new OpenLayers.Size(30, 30);
//尺寸大小
var calculateOffset = function(size) {
return new OpenLayers.Pixel(-(size.w/2), -size.h);
var icon = new OpenLayers.Icon(url, sz, null, calculateOffset);
var lonlat = map.getLonLatFromPixel(e.xy);
marker = new OpenLayers.Marker(lonlat, icon);
markers.addMarker(marker);
//将墨卡托坐标转换成经纬坐标
lonlat.transform(new OpenLayers.Projection(&EPSG:900913&),
new OpenLayers.Projection(&EPSG:4326&));
//坐标传回给父页面变量
parent.gisx = lonlat.lon.toFixed(5);
parent.gisy = lonlat.lat.toFixed(5);
以上几个功能对付简单GIS应用已经足够。
典型界面如下:
排名:第4241名
(27)(10)(6)(10)(56)(10)(22)(5)(7)(1)(6)(6)(8)(8)(6)(6)(8)(2)(7)(6)(2)(5)(5)(3)(5)(3)(14)类中一个函数怎么等待另一个函数执行完毕 - VC/MFC&&&&>>&& 类中一个函数怎样等待另一个函数执行完毕各位大神,如题,非常感谢!------解决方案--------------------弄个变量作为标记啊------解决方案--------------------这两个函数不会并行执行的,因此,只能一个函数执行完后才能执行另一个函数------解决方案--------------------引用:Quote: 引用:
这两个函数不会并行执行的,因此,只能一个函数执行完后才能执行另一个函数
您好,有什么办法可以让一个函数执行途中,再给另一个函数执行,完了再返回来执行剩下的,谢谢!
哇擦:LZ是还没有入门?还是,你这个话题太高深?
A函数执行中间调用B函数,自然就是A执行一部分,然后执行B,直到B完毕,接着执行A后面的部分------解决方案--------------------lz可能中了&面向对象编程模式&的“毒”,因而只见树木,未见森林
其实,程序都是自上而下执行的,不管中间产生多少分支、循环,最终都是长江一条,东流归海...
当然,如果有多个线程,就需要使用同步对象,以确保线程安全------解决方案--------------------参考一下多线程同步的内容吧
比如WaitForSingleObject------解决方案--------------------引用:Quote: 引用:
Quote: 引用:
Quote: 引用:
这两个函数不会并行执行的,因此,只能一个函数执行完后才能执行另一个函数
您好,有什么办法可以让一个函数执行途中,再给另一个函数执行,完了再返回来执行剩下的,谢谢!
哇擦:LZ是还没有入门?还是,你这个话题太高深?
A函数执行中间调用B函数,自然就是A执行一部分,然后执行B,直到B完毕,接着执行A后面的部分
我用comm控件做的串口通讯,发送完数据后,等接收数据后会触发comm事件接收,请问怎样让它处理完后再回到发送函数里?
你接收的时候,如果觉得时机合适,你就发呗?如果你觉得当时不能立即发,给自己post一个Message。如果你的逻辑非常复杂了。有两种方式:
1.状态机,那是万能的神,chrome的网络库靠一条线程和N个状态机,把这整个网络收发分析都搞定了。你一个串口收发,简直就是皮毛。
2.多线程(不建议),搞个什么接收线程,处理线程,发送线程,但问题你要协调好,搞不好一团。。。你读一些大型代码会发现,大神门能单线程调定的,他们绝对不会搞多的,线程是危险品,代码越复杂越危险。
------解决方案--------------------引用:Quote: 引用:
Quote: 引用:
Quote: 引用:
这两个函数不会并行执行的,因此,只能一个函数执行完后才能执行另一个函数
您好,有什么办法可以让一个函数执行途中,再给另一个函数执行,完了再返回来执行剩下的,谢谢!
哇擦:LZ是还没有入门?还是,你这个话题太高深?
A函数执行中间调用B函数,自然就是A执行一部分,然后执行B,直到B完毕,接着执行A后面的部分
我用comm控件做的串口通讯,发送完数据后,等接收数据后会触发comm事件接收,请问怎样让它处理完后再回到发送函数里?
你最原始的时候是怎么进入发送函数,还是怎么进入发送函数。comm控件的comm事件也只有等待你的发送函数执行完毕控制返回到消息循环之后,才有可能被执行,不可能发送做一半就执行comm事件代码的。
comm控件是单线程控件,所以,排除使用多线程来说这个------解决方案--------------------普通的函数本身就是线性执行的,当然可以通过代码控制。
若LZ想要的是动态的执行这种效果的话,方法仍然与上面一致的。}

我要回帖

更多关于 货物运输过程追踪程序 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信