tbox
tbox copied to clipboard
🎁 A glib-like multi-platform c library
你好,感谢开源,学习到很多。 目前有一个棘手的问题,就是我的程序,接收外部输入,每一次输入,对应一次http请求,服务器响应比较慢,同步的请求会使得程序io阻塞500ms,这500ms中可能有其他请求要处理,或者是需要进行其他操作,所以我希望http请求的操作是异步的。 异步的意思是我希望我的http请求函数可以立刻返回,在http请求返回数据的时候(500ms之后会返回json),通过事先注册的回调处理返回的json数据。 希望的函数签名是这样: ``` void http_request(const std::string & request_url, const std::string & header, std::function & func) { } ``` 之前有过一些调研,奈何码力不足,一直没有解决,应该是要使用协程 + http网络操作实现,不知道可否给予一些指导?感谢 ps. 比较注重性能和速度
### 描述问题 用宏实现的`round, floor, ceil`是有问题的。`floor`和`ceil`里面的数字精度不够,比如`tb_ceil(1e-15) == 0`。而`round`里面的`x+0.5`对于`0.49999999999999994`在默认舍入模式下也会给出错误的结果:`tb_round(0.49999999999999994) == 1`。 实际上c标准规定的`floor, ceil, round`是不受浮点环境而改变的,用宏写的加减法是会受到浮点环境影响的。 另外tbox里面没有包含的``里面`rint`系列函数,c标准里面它们是会受到浮点环境而改变的。 总之手写一个符合标准的舍入函数还是很不容易的,建议还是转发到标准库的实现吧。
### 你在什么场景下需要该功能? 目前tb_backtrace_symbols_name在不同平台下的返回值格式不一致: - Windows: `函数名` - Linux: `文件路径(函数地址) [栈帧地址]` - MacOS: `栈帧序号 文件名 栈帧地址 符号名 + 偏移量` ### 描述可能的解决方案 参考 https://github.com/MisterTea/UniversalStacktrace/blob/master/ust/ust.hpp#L276
### Is your feature request related to a problem? Please describe. We are using tbox to implement the file system related API in lolly: https://github.com/XmacsLabs/lolly/blob/main/System/Files/file.cpp And we find the APIs...
### Describe the bug Here is the todo code: https://github.com/tboox/tbox/blob/master/src/tbox/platform/windows/file.c#L410-L411 ### Expected behavior Symbol Link should be deteced ### Error output None ### Related Environment Windows ### Additional context Here...
### 描述问题详情 将tbox库编译为arm版本在android上执行下载华为云OBS文件,偶发在socket_poll.c的函数tb_socket_wait_impl中, poll数据失败,此时打印errno为11,后续继续调用下载,errno一直报11,重置当前的网络(切换4G到5G或者开关网络)就可以继续下载。无法下载时,使用libcurl可以正常下载,libcurl下载结束后再调用tbox的下载又恢复正常。 ###期望结果 偶发11失败是正常的,但是后续应该可以正常进行断点续传下载 ###其他信息 在使用tbox的下载失败时,更换其他的文件(非华为云OBS文件)可以正常下载。libcurl下载也会失败,但是下载失败后继续调用libcurl的下载仍然能够正常下载。 ###主要代码: ##下载代码 istream = tb_stream_init_from_url(url); if (!tb_stream_ctrl(istream, TB_STREAM_CTRL_HTTP_SET_HEAD_FUNC, ota_mgr_stream_head_func)) { tb_print("TB_STREAM_CTRL_HTTP_SET_HEAD_FUNC ctrl failed\n"); break; } if (!tb_stream_ctrl(istream, TB_STREAM_CTRL_HTTP_SET_HEAD, "Connection", "keep-alive")) { tb_print("TB_STREAM_CTRL_HTTP_SET_HEAD...
用tbox实现一个生产者消费者模型,其中包含了生产者信号量、消费者信号量、队列、锁,调试中发现锁操作太耗时,想着去掉锁。但发现队列是用单链表实现的,而单链表里有对变量size进行自增自减操作,这个在多核下会出问题。 有什么解决办法吗?想着将size的类型改成tb_atomic_t,然后把size相关的操作都改下,可以吗?
xmake.lua文件里面这么写的。 add_requires("tbox",{system = false ,configs = {charset=true,coroutine=true,database=true,debug=false,float=true,["force-utf8"]=true,hash=true,mbedtls=true,micro=true,mysql=true,object=true,openssl=true,pcre=true,pcre2=true,pic=true,polarssl=true,regex=true,shared=false,sqlite3=true,xml=true,zip=true,zlib=true}}) 执行安装的时候出错
[2023-06-07 15:41:28]: [28fc]: [tbox]: [thread_pool]: worker[0]: try pulling from waiting: 4 [2023-06-07 15:41:28]: [28fc]: [tbox]: [thread_pool]: worker[0]: pull: task[0x107e381:à§C] from waiting [2023-06-07 15:41:28]: [28fc]: [tbox]: [thread_pool]: worker[0]: pull: task[0x107e381:à§C] from...
在用参数: xmake f -m debug --vs_runtime=MDd -k static --demo=n --small=n --openssl=n --polarssl=n 配置 tbox 后 ``` ...... checking for windows__InterlockedExchange8_rel ... no checking for windows__InterlockedExchange8_nf ... no checking for windows__InterlockedCompareExchange_nf...