修复流式信息出现libcurl句柄问题

This commit is contained in:
JackLee 2025-03-02 17:55:48 +08:00
parent ba8d6edd14
commit 7cfbfae6d8
7 changed files with 1416 additions and 1431 deletions

Binary file not shown.

View File

@ -1,102 +1,66 @@
# ninja log v6
7383 58680 7626079855155628 CMakeFiles/ctai.dir/src/ctai.cpp.obj c7f0e07034d2e115
7401 12823 7626079855335805 CMakeFiles/ctai.dir/src/ctai_switch_control.cpp.obj ddca150b42c8a71b
12960 21531 7626079910924231 CMakeFiles/ctai.dir/qrc_res.cpp.obj 9f74f1f5e59b5b50
7390 47014 7626079855220635 CMakeFiles/ctai.dir/src/ctai_history_widget.cpp.obj 46c079d0c729ba31
7406 50500 7626079855375765 CMakeFiles/ctai.dir/src/ctai_tabwidget.cpp.obj 6fa8a641137702e0
4864 36817 7625506355308043 CMakeFiles/ctai.dir/src/ctai_textedit.cpp.obj 10751092db60a69f
7092 13031 7624392729099354 CMakeFiles/ctai.dir/src/ctai_session_docker.cpp.obj 215fc89727d9e8c1
16 7381 7626079854135217 ctai_autogen/timestamp da3870ebc94b983e
7386 39010 7626079855185600 CMakeFiles/ctai.dir/src/ctai_curl.cpp.obj b2496aab435c15c7
302 529 7626054468283748 F:/SourceCode/ctai/build/qrc_res.cpp 9794859fafc6825
12823 19305 7626079909555613 CMakeFiles/ctai.dir/src/sui_sys_style.cpp.obj 3bdd07348bd84970
7394 52185 7626079855260627 CMakeFiles/ctai.dir/src/ctai_session_info.cpp.obj 22d5a962360b4db1
16 7381 7626079854135217 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
16 7381 7626079854135217 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
12844 29360 7626079909756177 CMakeFiles/ctai.dir/src/sui_title.cpp.obj e026b4b712cf9da4
7399 51372 7626079855305649 CMakeFiles/ctai.dir/src/ctai_session_widget.cpp.obj 578ff58396e1bb80
4857 36686 7625506355235589 CMakeFiles/ctai.dir/src/ctai_msg_table.cpp.obj d5f943362cb1824b
7396 12844 7626079855280611 CMakeFiles/ctai.dir/src/ctai_session_setting.cpp.obj 4538c80be30eb6bc
7392 11770 7626079855240646 CMakeFiles/ctai.dir/src/ctai_parsestring.cpp.obj c7ba770f3578d195
7388 46575 7626079855205579 CMakeFiles/ctai.dir/src/ctai_history_textedit.cpp.obj d5c3d6d5615d47d0
7385 12960 7626079855165617 CMakeFiles/ctai.dir/src/ctai_cmd.cpp.obj 80d6964d23a3e9c5
7403 12662 7626079855355784 CMakeFiles/ctai.dir/src/ctai_tabbar.cpp.obj 41b68d110b3c0daf
19305 20061 7626079974370381 CMakeFiles/ctai.dir/sui.rc.obj e30df163c9cbe567
7381 59159 7626079855135653 CMakeFiles/ctai.dir/ctai_autogen/mocs_compilation.cpp.obj 696927afe9114740
302 529 7626054468283748 qrc_res.cpp 9794859fafc6825
11771 28989 7626079899025136 CMakeFiles/ctai.dir/src/sui.cpp.obj e1630d781a04e855
16 7381 7626079854135217 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
59159 70147 7626080372907471 F:/SourceCode/ctai/release/ctai.exe 4d63155bd63d4759
7096 13484 7624392729149768 CMakeFiles/ctai.dir/src/ctai_session_table.cpp.obj 5bacfc2db149ebf7
7408 53206 7626079855405832 CMakeFiles/ctai.dir/src/main.cpp.obj 77280178abb968fc
12662 38636 7626079907940824 CMakeFiles/ctai.dir/src/sui_base_ex.cpp.obj 476c94d1f2c8cfea
16 6799 7626094936437213 ctai_autogen/timestamp da3870ebc94b983e
16 6799 7626094936437213 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
16 6799 7626094936437213 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
16 6799 7626094936437213 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
6820 11551 7626094937733457 CMakeFiles/ctai.dir/src/ctai_switch_control.cpp.obj 5b4f3fa17aadf05d
6823 11650 7626094937761135 CMakeFiles/ctai.dir/src/ctai_tabbar.cpp.obj eeafbafed35daaf2
6815 11759 7626094937673639 CMakeFiles/ctai.dir/src/ctai_session_setting.cpp.obj 97bcecdc81f8d69a
6804 11907 7626094937567230 CMakeFiles/ctai.dir/src/ctai_cmd.cpp.obj f2014334430e71bd
6806 34432 7626094937587167 CMakeFiles/ctai.dir/src/ctai_curl.cpp.obj 511f74c0fcaa2e5f
16 4723 7626095343193695 ctai_autogen/timestamp da3870ebc94b983e
16 4723 7626095343193695 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
16 4723 7626095343193695 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
16 4723 7626095343193695 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
4748 8878 7626095344479039 CMakeFiles/ctai.dir/src/sui_sys_style.cpp.obj e3d97ea8bc1d2b2c
4753 10111 7626095344533870 CMakeFiles/ctai.dir/qrc_res.cpp.obj dd75527ee8dace65
4742 18062 7626095344408993 CMakeFiles/ctai.dir/src/sui.cpp.obj 42bed78c7899bffd
4751 18066 7626095344513825 CMakeFiles/ctai.dir/src/sui_title.cpp.obj 226322322265d1f8
4745 24869 7626095344451563 CMakeFiles/ctai.dir/src/sui_base_ex.cpp.obj 4278f5aab5827fc6
4728 39193 7626095344279213 CMakeFiles/ctai.dir/src/ctai_history_textedit.cpp.obj 9afc647ddec3b160
4730 39220 7626095344296609 CMakeFiles/ctai.dir/src/ctai_history_widget.cpp.obj ff767b1a439cfa8f
4738 43325 7626095344388240 CMakeFiles/ctai.dir/src/ctai_tabwidget.cpp.obj 30e97d05c008cea2
4737 44439 7626095344368259 CMakeFiles/ctai.dir/src/ctai_session_widget.cpp.obj 44a14cc778bf0b
4740 44583 7626095344407357 CMakeFiles/ctai.dir/src/main.cpp.obj cdab1c27daa47f87
4734 44810 7626095344338233 CMakeFiles/ctai.dir/src/ctai_session_info.cpp.obj d12cfe3d50990a54
4726 48644 7626095344261763 CMakeFiles/ctai.dir/src/ctai.cpp.obj f1f03f3c05222920
4724 50206 7626095344234221 CMakeFiles/ctai.dir/ctai_autogen/mocs_compilation.cpp.obj 17adb079db0c1349
18 4959 7626100270120785 ctai_autogen/timestamp da3870ebc94b983e
18 4959 7626100270120785 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
18 4959 7626100270120785 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
18 4959 7626100270120785 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
4980 5212 7626100271326872 CMakeFiles/ctai.dir/sui.rc.obj 8caec2f89e692c3b
4969 7174 7626100271213174 CMakeFiles/ctai.dir/src/ctai_parsestring.cpp.obj e7088975ee9d75b9
4965 37689 7626100271170417 CMakeFiles/ctai.dir/src/ctai_history_textedit.cpp.obj 9afc647ddec3b160
4967 37911 7626100271193199 CMakeFiles/ctai.dir/src/ctai_history_widget.cpp.obj ff767b1a439cfa8f
4976 42558 7626100271278798 CMakeFiles/ctai.dir/src/ctai_tabwidget.cpp.obj 30e97d05c008cea2
4973 43773 7626100271256523 CMakeFiles/ctai.dir/src/ctai_session_widget.cpp.obj 44a14cc778bf0b
4978 44360 7626100271298778 CMakeFiles/ctai.dir/src/main.cpp.obj cdab1c27daa47f87
4971 44642 7626100271233155 CMakeFiles/ctai.dir/src/ctai_session_info.cpp.obj d12cfe3d50990a54
4962 48705 7626100271140359 CMakeFiles/ctai.dir/src/ctai.cpp.obj f1f03f3c05222920
4960 50397 7626100271120321 CMakeFiles/ctai.dir/ctai_autogen/mocs_compilation.cpp.obj 17adb079db0c1349
50397 71973 7626100725493529 F:/SourceCode/ctai/release/ctai.exe bbede5bc6dd5d74a
18 305 7626106162614347 ctai_autogen/timestamp da3870ebc94b983e
18 305 7626106162614347 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
18 305 7626106162614347 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
18 305 7626106162614347 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
306 16084 7626106165485061 CMakeFiles/ctai.dir/src/ctai_curl.cpp.obj 511f74c0fcaa2e5f
308 24704 7626106165519846 CMakeFiles/ctai.dir/src/ctai_history_textedit.cpp.obj 9afc647ddec3b160
24704 36118 7626106409487508 F:/SourceCode/ctai/release/ctai.exe bbede5bc6dd5d74a
26 295 7626107126004513 ctai_autogen/timestamp da3870ebc94b983e
26 295 7626107126004513 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
26 295 7626107126004513 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
26 295 7626107126004513 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
17 299 7626107530168204 ctai_autogen/timestamp da3870ebc94b983e
17 299 7626107530168204 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
17 299 7626107530168204 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
17 299 7626107530168204 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
300 17843 7626107532992409 CMakeFiles/ctai.dir/src/ctai_curl.cpp.obj 511f74c0fcaa2e5f
17843 29342 7626107708431578 F:/SourceCode/ctai/release/ctai.exe bbede5bc6dd5d74a
19 304 7626109402581002 ctai_autogen/timestamp da3870ebc94b983e
19 304 7626109402581002 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
19 304 7626109402581002 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
19 304 7626109402581002 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
304 19584 7626109405446511 CMakeFiles/ctai.dir/src/ctai_curl.cpp.obj 511f74c0fcaa2e5f
19584 30432 7626109598248568 F:/SourceCode/ctai/release/ctai.exe bbede5bc6dd5d74a
302 529 7626054468283748 F:/SourceCode/ctai/build/qrc_res.cpp 9794859fafc6825
20 312 7626110238955525 ctai_autogen/timestamp da3870ebc94b983e
20 312 7626110238955525 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
20 312 7626110238955525 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
20 312 7626110238955525 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
313 18539 7626110241890638 CMakeFiles/ctai.dir/src/ctai_curl.cpp.obj 511f74c0fcaa2e5f
7092 13031 7624392729099354 CMakeFiles/ctai.dir/src/ctai_session_docker.cpp.obj 215fc89727d9e8c1
4864 36817 7625506355308043 CMakeFiles/ctai.dir/src/ctai_textedit.cpp.obj 10751092db60a69f
4976 42558 7626100271278798 CMakeFiles/ctai.dir/src/ctai_tabwidget.cpp.obj 30e97d05c008cea2
4967 37911 7626100271193199 CMakeFiles/ctai.dir/src/ctai_history_widget.cpp.obj ff767b1a439cfa8f
4753 10111 7626095344533870 CMakeFiles/ctai.dir/qrc_res.cpp.obj dd75527ee8dace65
20 312 7626110238955525 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
4971 44642 7626100271233155 CMakeFiles/ctai.dir/src/ctai_session_info.cpp.obj d12cfe3d50990a54
6820 11551 7626094937733457 CMakeFiles/ctai.dir/src/ctai_switch_control.cpp.obj 5b4f3fa17aadf05d
4962 48705 7626100271140359 CMakeFiles/ctai.dir/src/ctai.cpp.obj f1f03f3c05222920
20 312 7626110238955525 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
4751 18066 7626095344513825 CMakeFiles/ctai.dir/src/sui_title.cpp.obj 226322322265d1f8
4973 43773 7626100271256523 CMakeFiles/ctai.dir/src/ctai_session_widget.cpp.obj 44a14cc778bf0b
4857 36686 7625506355235589 CMakeFiles/ctai.dir/src/ctai_msg_table.cpp.obj d5f943362cb1824b
6815 11759 7626094937673639 CMakeFiles/ctai.dir/src/ctai_session_setting.cpp.obj 97bcecdc81f8d69a
4969 7174 7626100271213174 CMakeFiles/ctai.dir/src/ctai_parsestring.cpp.obj e7088975ee9d75b9
308 24704 7626106165519846 CMakeFiles/ctai.dir/src/ctai_history_textedit.cpp.obj 9afc647ddec3b160
6804 11907 7626094937567230 CMakeFiles/ctai.dir/src/ctai_cmd.cpp.obj f2014334430e71bd
6823 11650 7626094937761135 CMakeFiles/ctai.dir/src/ctai_tabbar.cpp.obj eeafbafed35daaf2
4980 5212 7626100271326872 CMakeFiles/ctai.dir/sui.rc.obj 8caec2f89e692c3b
4960 50397 7626100271120321 CMakeFiles/ctai.dir/ctai_autogen/mocs_compilation.cpp.obj 17adb079db0c1349
302 529 7626054468283748 qrc_res.cpp 9794859fafc6825
4742 18062 7626095344408993 CMakeFiles/ctai.dir/src/sui.cpp.obj 42bed78c7899bffd
20 312 7626110238955525 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
18539 29807 7626110424156190 F:/SourceCode/ctai/release/ctai.exe bbede5bc6dd5d74a
4745 24869 7626095344451563 CMakeFiles/ctai.dir/src/sui_base_ex.cpp.obj 4278f5aab5827fc6
4978 44360 7626100271298778 CMakeFiles/ctai.dir/src/main.cpp.obj cdab1c27daa47f87
7096 13484 7624392729149768 CMakeFiles/ctai.dir/src/ctai_session_table.cpp.obj 5bacfc2db149ebf7
18 5097 7626113129573703 ctai_autogen/timestamp da3870ebc94b983e
18 5097 7626113129573703 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
18 5097 7626113129573703 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
18 5097 7626113129573703 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
5102 27531 7626113130732535 CMakeFiles/ctai.dir/src/ctai_curl.cpp.obj 511f74c0fcaa2e5f
5107 40373 7626113130794872 CMakeFiles/ctai.dir/src/ctai_tabwidget.cpp.obj 30e97d05c008cea2
5105 41606 7626113130777479 CMakeFiles/ctai.dir/src/ctai_session_widget.cpp.obj 44a14cc778bf0b
5110 41840 7626113130818153 CMakeFiles/ctai.dir/src/main.cpp.obj cdab1c27daa47f87
5104 42037 7626113130759961 CMakeFiles/ctai.dir/src/ctai_session_info.cpp.obj d12cfe3d50990a54
5100 45613 7626113130715147 CMakeFiles/ctai.dir/src/ctai.cpp.obj f1f03f3c05222920
5098 47450 7626113130697750 CMakeFiles/ctai.dir/ctai_autogen/mocs_compilation.cpp.obj 17adb079db0c1349
47451 59001 7626113554232029 F:/SourceCode/ctai/release/ctai.exe bbede5bc6dd5d74a
26 5281 7626118030849102 ctai_autogen/timestamp da3870ebc94b983e
26 5281 7626118030849102 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
26 5281 7626118030849102 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
26 5281 7626118030849102 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
18 5237 7626118451724977 ctai_autogen/timestamp da3870ebc94b983e
18 5237 7626118451724977 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
18 5237 7626118451724977 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
18 5237 7626118451724977 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
5242 27105 7626118452872000 CMakeFiles/ctai.dir/src/ctai_curl.cpp.obj 511f74c0fcaa2e5f
5250 39767 7626118452959188 CMakeFiles/ctai.dir/src/ctai_tabwidget.cpp.obj 30e97d05c008cea2
5248 41203 7626118452924396 CMakeFiles/ctai.dir/src/ctai_session_widget.cpp.obj 44a14cc778bf0b
5253 41395 7626118452969228 CMakeFiles/ctai.dir/src/main.cpp.obj cdab1c27daa47f87
5245 41406 7626118452907010 CMakeFiles/ctai.dir/src/ctai_session_info.cpp.obj d12cfe3d50990a54
5240 44971 7626118452856952 CMakeFiles/ctai.dir/src/ctai.cpp.obj f1f03f3c05222920
5238 46923 7626118452822166 CMakeFiles/ctai.dir/ctai_autogen/mocs_compilation.cpp.obj 17adb079db0c1349
46923 59102 7626118869689173 F:/SourceCode/ctai/release/ctai.exe bbede5bc6dd5d74a
19 296 7626124060032869 ctai_autogen/timestamp da3870ebc94b983e
19 296 7626124060032869 ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
19 296 7626124060032869 F:/SourceCode/ctai/build/ctai_autogen/timestamp da3870ebc94b983e
19 296 7626124060032869 F:/SourceCode/ctai/build/ctai_autogen/mocs_compilation.cpp da3870ebc94b983e
322 18468 7626124063044093 CMakeFiles/ctai.dir/src/ctai_curl.cpp.obj 511f74c0fcaa2e5f
18469 29607 7626124244517930 F:/SourceCode/ctai/release/ctai.exe bbede5bc6dd5d74a

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -1,7 +1,8 @@
#include "ctai_curl.h"
ctai_curl::ctai_curl() : m_curl(nullptr),
m_headers(nullptr)
m_headers(nullptr),
m_initialized(false) // 初始化标志
{
}
ctai_curl::~ctai_curl()
@ -257,58 +258,77 @@ void ctai_curl::set_send_post_option()
}
void ctai_curl::set_send_post_opts_reset()
{
curl_easy_reset(m_curl);
m_headers = nullptr;
curl_easy_setopt(m_curl, CURLOPT_NOSIGNAL, 1L);
curl_easy_setopt(m_curl, CURLOPT_POSTFIELDS, NULL);
curl_easy_setopt(m_curl, CURLOPT_POST, 0L);
curl_easy_setopt(m_curl, CURLOPT_URL, NULL);
curl_easy_setopt(m_curl, CURLOPT_POSTFIELDSIZE, 0);
curl_easy_setopt(m_curl, CURLOPT_HTTPHEADER, NULL);
// 先清理 headers
if (m_headers) {
curl_slist_free_all(m_headers);
m_headers = nullptr;
}
if (m_curl) {
// 完全清理旧的 handle
curl_easy_cleanup(m_curl);
// 创建新的 handle
m_curl = curl_easy_init();
if (m_curl) {
// 设置基本选项
curl_easy_setopt(m_curl, CURLOPT_NOSIGNAL, 1L);
}
}
}
void ctai_curl::curl_init()
{
curl_global_init(CURL_GLOBAL_ALL);
if (!m_initialized) {
curl_global_init(CURL_GLOBAL_ALL);
m_initialized = true;
}
// 每次都创建新的 handle
if (m_curl) {
curl_easy_cleanup(m_curl);
}
m_curl = curl_easy_init();
m_error = CURLE_QUOTE_ERROR;
if (!m_curl) {
throw std::runtime_error("Failed to initialize CURL handle");
}
}
void ctai_curl::send_post_response(model_data m_data, curl_opts opts)
{
if (!m_curl) {
emit send_post_out_error("CURL handle is null");
return;
}
c_data = m_data;
c_opts = opts;
c_data.request_body = send_send_body(c_data);
std::string response_data;
call_back_context ctx;
ctx.m_data = c_data;
ctx.instance = this;
if (m_curl)
{
try {
std::string response_data;
call_back_context ctx{this, c_data}; // 使用列表初始化
set_send_post_option();
if (c_data.postback_stream_mode)
{
// 流式输出
if (c_data.postback_stream_mode) {
curl_easy_setopt(m_curl, CURLOPT_WRITEFUNCTION, stream_callback);
curl_easy_setopt(m_curl, CURLOPT_WRITEDATA, &ctx);
}
else
{
// 非流式输出
} else {
curl_easy_setopt(m_curl, CURLOPT_WRITEFUNCTION, not_stream_callback);
curl_easy_setopt(m_curl, CURLOPT_WRITEDATA, &response_data);
}
m_error = curl_easy_perform(m_curl);
if (m_error == CURLE_OK)
{
if (!c_data.postback_stream_mode)
{
send_not_stream(c_data, response_data.data());
emit send_post_out_data(c_data);
}
}
else
{
if (m_error != CURLE_OK) {
emit send_post_out_error(curl_easy_strerror(m_error));
} else if (!c_data.postback_stream_mode) {
send_not_stream(c_data, response_data);
emit send_post_out_data(c_data);
}
set_send_post_opts_reset();
}
catch (const std::exception& e) {
emit send_post_out_error(e.what());
}
// 请求完成后重置
set_send_post_opts_reset();
}

View File

@ -34,6 +34,7 @@ private:
CURLcode m_error;
model_data c_data;
curl_opts c_opts;
bool m_initialized; // 添加初始化状态标志
void set_send_post_option();
void set_send_post_opts_reset();
std::string send_send_body(model_data);