|
|

参数限制
参数 有效范围 说明
IP地址标准IPv4字符串如 "192.168.1.100",不支持域名
端口1 ~ 655350为非法
速率Mbps> 0支持小数,如 1.5
包大小1 ~ 65507默认1400,UDP最大65507字节
一、初始化与清理必须调用 UDP_初始化()
在所有发包操作之前,必须先调用一次 UDP_初始化()。建议放在 __启动窗口_创建完毕 或主线程启动位置。初始化失败时(返回假),不能进行任何发包。 程序退出前必须调用 UDP_清理()
在窗口销毁或程序结束前,确保调用 UDP_清理() 释放 Winsock 资源。务必确保所有发包线程已经停止,否则可能导致崩溃或资源泄漏。 不要重复初始化
模块内部已做防重复处理,但建议在主线程中只调用一次,不要在多个线程中同时调用初始化。
二、停止标志(红绿灯机制)停止标志必须为程序集或全局变量
不能使用局部变量,否则线程无法从外部修改它。 停止标志必须设为“参考”(传址)
调用模块时,传递的停止标志参数必须勾选“参考”,这样模块内部才能读取外部变量的实时值。在模块代码中已设置好,调用时只需传入变量名即可。 启动新任务前重置停止标志为假
每次启动发包前,必须将对应的停止标志变量赋值为 假(绿灯),否则发包循环不会开始。 停止任务时,将停止标志赋值为真
外部需要停止发包时,执行 停止标志 = 真,模块内部的循环会立即检测到并退出。 一个停止标志只能控制一个任务
多线程并发发包时,每个任务必须使用独立的停止标志变量。共用同一个标志会导致一个停止信号误停所有任务。如果你想全部任务停止的话,就共用同一个标志。
三、多线程使用模块内部每个发包任务创建独立套接字
因此多个线程可以同时调用发包子程序(不同目标IP或相同目标IP),不会相互干扰。无需担心套接字冲突。 线程池投递任务时传递索引
如果使用鱼刺线程池或YY线程池,建议将任务ID(索引)作为参数传递,线程内根据索引访问全局数组中的停止标志。不能直接将局部变量作为停止标志传递,否则外部无法控制。 等待线程退出后再清理
程序退出前,先将所有停止标志设为真,然后延时 500~1000 毫秒(给线程退出时间),最后调用 UDP_清理()。 避免高频率启动/销毁大量线程
如果需要频繁创建短任务,建议使用线程池复用线程,避免频繁创建销毁的开销。
四、速率准确性高精度版
采用纯自旋等待,CPU占用较高,但速率较为准确(误差 < 1%)。 如果实际速率与设定值偏差较大,请检查目标机器的防火墙或限流策略,以及网络拥塞情况。 不要在高精度循环中调用 处理事件() 或 延时(),会破坏精度。
低CPU版 采用批量发送+延时策略,CPU占用极低,但速率可能有 ±5% 的偏差。 可通过修改模块内部的 校准系数(默认为1.12)来微调实际速率。 批间隔固定为30毫秒,若需要更平滑的发送,可适当减小批间隔(例如20ms),但会增加CPU占用。
|
|