1.ç¨vb6å¯ä¸å¯ä»¥è®¾è®¡å¤çº¿ç¨åºçåºç¨ç¨åºï¼å¦ä½å®ç°
2.udp如何实现可靠性传输?(附开源项目)
3.dudoj简单易用的API
4.Cesium中文网——如何开发一款地图下载工具[一]
5.VB6 (Visual Basic 6)的替代开发语言FreeBasic介绍
ç¨vb6å¯ä¸å¯ä»¥è®¾è®¡å¤çº¿ç¨åºçåºç¨ç¨åºï¼å¦ä½å®ç°
å¤çº¿ç¨æ¯å¯ä»¥åï¼åªæ¯ä¸å¤ªå®å ¨ï¼å®¹æéæ³æä½ï¼
æºä»£ç å¦ä¸ï¼
çªä½ä¸ç代ç ï¼
Option Explicit
'å¼å§
Private Sub Command1_Click()
On Error Resume Next
With myThreadleft
.Initialize AddressOf Fillleft 'ä¼ éè¿ç¨å°åç»çº¿ç¨
.ThreadEnabled = True
End With
With myThreadright
.Initialize AddressOf Fillright
.ThreadEnabled = True
End With
With myThreadbottom
.Initialize AddressOf Fillbottom
.ThreadEnabled = True
End With
MsgBox "å¤çº¿ç¨æ£å¨è¿è¡...ï¼ççå¾çæ¡æ§ä»¶çåè²ææï¼", , "ä¿¡æ¯"
'ç»æ¢çº¿ç¨è¿è¡
Set myThreadleft = Nothing
Set myThreadright = Nothing
Set myThreadbottom = Nothing
End Sub
'ç»æ
Private Sub Command2_Click()
Unload Me
End Sub
模åä¸ç代ç ï¼
Option Explicit
'æ¶é´è®¡æ°API
Private Declare Function GetTickCount Lib "kernel" () As Long
'声æcls_threadç±»ç对象åé
Public myThreadleft As New cls_thread, myThreadright As New cls_thread, myThreadbottom As New cls_thread
Sub Main()
Load Form1
Form1.Show
End Sub
Public Sub Fillleft()
Static Bkgcolor As Long
Dim LongTick As Long, Longcounter As Long
On Error Resume Next
For Longcounter = 0 To
DoEvents
Bkgcolor = Longcounter Mod
Form1.Picture1.BackColor = RGB(Bkgcolor, 0, 0)
LongTick = GetTickCount
While GetTickCount - LongTick < '延æ¶æ¯«ç§,ä¸å
Wend
Next
Set myThreadleft = Nothing 'å¦æ循ç¯ç»æåç»æ¢å½å线ç¨è¿è¡ï¼ä¸å
End Sub
Public Sub Fillright()
Static Bkgcolor As Long
Dim LongTickValue As Long, Longcounter As Long
On Error Resume Next
For Longcounter = 0 To
DoEvents
Bkgcolor = Longcounter Mod
Form1.Picture2.BackColor = RGB(0, Bkgcolor, 0)
LongTickValue = GetTickCount
While GetTickCount - LongTickValue <
Wend
Next
Set myThreadright = Nothing
End Sub
Public Sub Fillbottom()
Static Bkgcolor As Long
Dim LongTick As Long, Longcounter As Long
On Error Resume Next
For Longcounter = 0 To
DoEvents
Bkgcolor = Longcounter Mod
Form1.Picture3.BackColor = RGB(0, 0, Bkgcolor)
LongTick = GetTickCount
While GetTickCount - LongTick <
Wend
Next
Set myThreadright = Nothing
End Sub
类模åä¸ç代ç ï¼
'åè½ï¼å建å¤çº¿ç¨ç±»ï¼ç¨äºåå§å线ç¨ã ç±»åï¼cls_Thread
'åæ°ï¼LongPointFunction ç¨äºæ¥æ¶ä¸»è°è¿ç¨ä¼ éè¿æ¥çå½æ°å°åå¼
'è°ç¨æ¹æ³ï¼1.声æ线ç¨ç±»å¯¹è±¡åé Dim mythread as cls_Thread
' 2.è°ç¨å½¢å¼ï¼With mythread
' .Initialize AddressOf èªå®ä¹è¿ç¨æå½æ°å '(åå§å线ç¨) .
' .ThreadEnabled = True '(设置线ç¨æ¯å¦æ¿æ´»)
' End With
' 3.ç»æ¢è°ç¨ï¼ Set mythread = Nothing
' Crate By : éå® On .5. Copyright(C).Ldt By CY-soft --
' Email:4y4ycoco@.com
' Test Onï¼ VB6.0+Win AND VB6.0+WinXP It's Pass ï¼
Option Explicit
'å建线ç¨API
'æ¤APIç»è¿æ¹é ï¼lpThreadAttributesæ¹ä¸ºAnyåï¼lpStartAddressæ¹ä¸ºä¼ å¼å¼ç¨ï¼
'å 为å½æ°çå ¥å£å°åç±å½¢ååéä¼ éï¼å¦æç¨ä¼ åé£å°ä¼ éå½¢ååéçå°åèä¸æ¯å½æ°çå ¥å£å°å
Private Declare Function CreateThread Lib "kernel" (ByVal lpThreadAttributes As Any, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, LpthreadId As Long) As Long
'ç»æ¢çº¿ç¨API
Private Declare Function TerminateThread Lib "kernel" (ByVal hThread As Long, ByVal dwExitCode As Long) As Long
'æ¿æ´»çº¿ç¨API
Private Declare Function ResumeThread Lib "kernel" (ByVal hThread As Long) As Long
'æ起线ç¨API
Private Declare Function SuspendThread Lib "kernel" (ByVal hThread As Long) As Long
Private Const CREATE_SUSPENDED = &H4 '线ç¨æ起常é
'èªå®ä¹çº¿ç¨ç»æç±»å
Private Type udtThread
Handle As Long
Enabled As Boolean
End Type
Private meTheard As udtThread
'åå§å线ç¨
Public Sub Initialize(ByVal LongPointFunction As Long)
Dim LongStackSize As Long, LongCreationFlags As Long, LpthreadId As Long, LongNull As Long
On Error Resume Next
LongNull = 0
LongStackSize = 0
LongCreationFlags = CREATE_SUSPENDED 'å建线ç¨åå æèµ·ï¼ç±ç¨åºæ¿æ´»çº¿ç¨
'å建线ç¨å¹¶è¿çº¿ç¨å¥æ
meTheard.Handle = CreateThread(LongNull, LongStackSize, ByVal LongPointFunction, LongNull, LongCreationFlags, LpthreadId)
If meTheard.Handle = LongNull Then
MsgBox "线ç¨å建失败ï¼", , "é误"
End If
End Sub
'è·å线ç¨æ¯å¦æ¿æ´»å±æ§
Public Property Get ThreadEnabled() As Boolean
On Error Resume Next
Enabled = meTheard.Enabled
End Property
'设置线ç¨æ¯å¦æ¿æ´»å±æ§
Public Property Let ThreadEnabled(ByVal Newvalue As Boolean)
On Error Resume Next
'è¥æ¿æ´»çº¿ç¨ï¼Newvalue为çï¼è®¾ä¸ºTRUEä¸æ¤çº¿ç¨åæ¥æ²¡ææ¿æ´»æ¶æ¿æ´»æ¤çº¿ç¨
If Newvalue And (Not meTheard.Enabled) Then
ResumeThread meTheard.Handle
meTheard.Enabled = True
Else 'è¥æ¿æ´»çº¿ç¨ï¼Newvalue为çï¼ä¸æ¤çº¿ç¨åæ¥å·²æ¿æ´»åæèµ·æ¤çº¿ç¨
If meTheard.Enabled Then
SuspendThread meTheard.Handle
meTheard.Enabled = False
End If
End If
End Property
'ç»æ¢çº¿ç¨äºä»¶
Private Sub Class_Terminate()
On Error Resume Next
Call TerminateThread(meTheard.Handle, 0)
End Sub
udp如何实现可靠性传输?(附开源项目)
在UDP应用中,实现可靠性传输并非其固有特性,但可以通过应用层策略来弥补。这里,我们将探讨几种方法,包括RUDP和UDT,双开app 源码以及如何通过源码分析实现。
首先,TCP通过重传策略确保数据的可靠性。当数据段未收到确认时,TCP会启动重传定时器,如果超时未收到确认,会根据网络情况动态调整重传时间。此外,TCP还使用窗口确认机制,通过序列号和确认号来保证数据的有序到达。
相比之下,UDP作为无连接协议,不提供这些内置机制。然而,RUDP通过引入改进的拥塞控制、重发机制和淡化服务器算法,为实时应用如音频和视频提供了增强的平板课堂 源码数据服务质量。RTP则依赖底层网络的服务,虽然不保证数据顺序,但通过序列号支持重组和位置确定。
UDT,一个建立在UDP之上的协议,通过添加拥塞控制和数据可靠性控制来实现可靠传输。UDT采用面向连接的方式,支持双向数据流,并结合了速率控制和流量控制。它通过固定包大小、定时器和报文类型来管理数据传输,确保数据的可靠接收。
一种简单的实现方法是模拟TCP确认机制:发送端发送数据并分配序列号,接收端接收数据后确认,发送端根据确认删除已发送的数据,通过定时任务检查是否需要重传未确认的数据。
在实际项目中,可以参考开源项目如github.com/caozhiyi/Hud...来深入理解UDT的实现细节。这些技术虽然复杂,但为UDP提供了在特定应用场景下的可靠性保障。
dudoj简单易用的API
DudoJ框架为开发者提供了一种简单易用的API,通过其统一的koahub 源码下载SQL函数接口,你无需关注底层数据库的具体差异。只需要熟悉DudoJ框架提供的函数定义,就能进行高效开发,大大简化了工作流程。对于常见的分段查询问题,DudoJ为你提供了方便的解决方案。使用Limit函数即可实现跨数据库平台的优化查询,无需担心效率问题,DudoJ会根据具体平台自动生成高效代码,确保一致性。 在对象持久化方面,DudoJ支持用户自定义对象(UDT)的持久化。你只需为要持久化的对象实现SQLData接口,DudoJ就能自动处理Map、List、Collection、Set等容器中的自定义对象,无需额外操作。这极大地提升了数据处理的便捷性。 DudoJ注重性能,尤其是在处理大批量数据时。与其他框架依赖反射机制不同,jrs直播源码DudoJ在初始化时使用反射,后续操作直接操作对象,避免了反射带来的性能损耗,从而提高系统效率。 此外,DudoJ具有灵活的用户定制机制,其开放的体系结构允许开发者扩展框架功能,以满足多样化的需求。通过扩展接口,你可以扩展DudoJ框架的功能,使其适应你的项目和客户的需求。 最后,DudoJ是一个开源项目,遵循GNU LGPL许可协议,所有的源代码都对公众开放,这为开发者提供了更多的自由和选择。扩展资料
DudoJ是一个基于java的数据持久化框架,但它完全不同于其他的持久化框架,她给系统开发带来了许多令人振奋的功能。Cesium中文网——如何开发一款地图下载工具[一]
Cesium中文网: cesiumcn.org/ | 国内快速访问: cesium.coinidea.com/
Cesium中文网的朋友们其中一个关注点是:独立开发一款地图(瓦片图)下载工具。
我们将通过多个博客文章[所有用户]和视频[付费用户]的形式来拆分并介绍这个主题。源代码将不断更新并提交到Github,apicloud通讯源码地址:github.com/hujiulin/Map...。源代码对所有用户开放,若您觉得对您有帮助,请给予一个star以示鼓励。
重剑无锋,大巧不工。
这个工具将以C#和JavaScript的形式呈现。编程语言只是形式,理解其内部逻辑和流程,您也可以使用Java,Python,PHP或其他开发语言进行实现。
目前开源的工具非常简单(简陋),但我将定期更新和维护代码。如果您有任何问题,可以在Github上提交issue,或在公众号:Cesium中文网;QQ群:;论坛: cesium.coinidea.com/上留言和提问。
准备工作:
找到自己熟悉的一门开发语言,它支持:
一般来说,现代的开发语言都支持上述大部分功能。本文选择的是C#。在整个主题的中部,会引入JavaScript。
瓦片图服务器:
本文选择的是百度地图,其实大部分的瓦片图服务器都会有x, y, z(level)三个参数,百度地图的URL Pattern是:online{ 0}.map.bdimg.com/onlinelab...{ 1}&y={ 2}&z={ 3}&styles=pl&udt=&scaler=1&p=0
如果我们把x=1, y=1, z=3,在浏览器打开上述URL
online0.map.bdimg.com/o...
样例瓦片图
既然我们已经知道了瓦片图的生成规则,那我们只要指定具体的下载链接,我们就可以下载对应的了。C#的核心下载代码是,这里代码可以轻易地在网络上搜索到:
瓦片图批量下载:
接下来我们要做的是:
之前提到过地图的核心思想是四叉树,所以我们可以再次简单的处理,认为瓦片图也是四叉树构成的,一共分为级(网上可查)左右。那么
levelminX~maxXminY~maxY~~~~~~4…n1~2^(n-1)1~2^(n-1)
四叉树
批量下载的核心代码如下:
上述的运行代码肯定能下载,但是有很多问题。这些问题将在下一步中进行讨论。
当前软件界面
下载结果
下一步:
上面的这些问题将在后续的文章中进行介绍。
声明:
一般来说,地图服务器需要很大的存储资源和带宽资源,本文仅从学术角度和大家探讨现在的下载软件内部原理,如有错误欢迎大家指正。
Again: Github地址:github.com/hujiulin/Map...。源代码对所有用户开放,如果大家觉得有益,请轻轻地给一个star进行鼓励。
本文和软件仅做学术交流,严禁用于商业用途。
Cesium中文网交流QQ群:
Cesium中文网: cesiumcn.org/ | 国内快速访问: cesium.coinidea.com/
VB6 (Visual Basic 6)的替代开发语言FreeBasic介绍
FreeBASIC是一款免费开源的BASIC编译器,支持Windows、DOS和Linux平台。它在“QB”模式下与QuickBASIC兼容,可编译和运行为QuickBASIC编写程序的大部分代码,但默认模式下的程序可能需要修改。FreeBASIC是自托管编译器,具备生成控制台、图形/GUI可执行文件、动态和静态库的能力,并全面支持C库,部分C++库也可使用。其语法简洁,与C语言兼容,支持多种数据类型、语言结构和编程风格。
FreeBASIC支持多平台操作,可在/位Windows、Linux和DOS上运行,同时为Xbox控制台开发应用程序。它具有良好的跨平台兼容性,运行时库旨在提高可移植性,使用的工具与GNU binutils兼容,编译器本身也是用FreeBASIC编写,不依赖非便携式工具,易于引导。
FreeBASIC支持Unicode,能够解析UTF-8、UTF-LE、UTF-BE、UTF-LE和UTF-BE格式的源文件或头文件,且支持与ASCII文件混合使用,文本编辑器只需支持上述某些Unicode格式即可。它提供了大量的内置数据类型,包括整数、浮点数、字符串(固定、可变长度、以空值结尾、Unicode宽字符)、用户自定义类型(UDT)等,同时支持数组、指针、枚举、位字段等。
FreeBASIC具备丰富的功能,如默认过程参数值、内联汇编语法、传统预处理器支持、调试支持、创建OBJ、LIB、DLL和控制台或GUI EXE等。它能够生成与主流编译器相媲美的优化代码,并且不依赖任何废弃或受版权保护的软件,使用GNU binutils编程工具。
FreeBASIC提供了一个集成开发环境(IDE),如visual free basic,它简化了编程流程,用户可以专注于应用层面的开发。visual free basic 5是基于FreeBasic语言的IDE工具,支持可视化编辑窗口、控件生成代码、中文函数和变量名称、代码提示、自动补全、资源文件管理等功能,适用于从新手到高级开发者。
FreeBASIC的文档和资源可以在官方网站、论坛和相关网站找到,包括手册、源代码、中文版手册、社区支持等。社区活跃,提供了丰富的学习资料和交流平台,适合各个水平的开发者。