【发布时间】:2021-12-13 21:45:06
【问题描述】:
这段代码有什么不同:
std::vector<Server> realsense_server_arr;
for (int i = 0; i < 1; ++i) {
printf("Initializing server... %d\n", i);
Server realsense_server(50000 + i);
realsense_server.init_listener_thread();
realsense_server_arr.emplace_back(realsense_server);
}
int depth_size = aligned_depth.get_width() * aligned_depth.get_height() * aligned_depth.get_bytes_per_pixel();
realsense_server_arr[0].update_buffer((unsigned char*)aligned_depth.get_data(), 10 * 4, depth_size);
int color_size = data.get_color_frame().get_width() * data.get_color_frame().get_height() * data.get_color_frame().get_bytes_per_pixel();
realsense_server_arr[0].update_buffer((unsigned char*)color.get_data(), 10*4 + depth_size, color_size);
// Send camera intrinsics and depth scale
realsense_server_arr[0].update_buffer((unsigned char*)color_intrinsics_arr, 0, 9 * 4);
realsense_server_arr[0].update_buffer((unsigned char*)&depth_scale, 9 * 4, 4);
对比这段代码:
Server realsense_server(50000);
realsense_server.init_listener_thread();
int depth_size = aligned_depth.get_width() * aligned_depth.get_height() * aligned_depth.get_bytes_per_pixel();
realsense_server.update_buffer((unsigned char*)aligned_depth.get_data(), 10 * 4, depth_size);
int color_size = data.get_color_frame().get_width() * data.get_color_frame().get_height() * data.get_color_frame().get_bytes_per_pixel();
realsense_server.update_buffer((unsigned char*)color.get_data(), 10 * 4 + depth_size, color_size);
// Send camera intrinsics and depth scale
realsense_server.update_buffer((unsigned char*)color_intrinsics_arr, 0, 9 * 4);
realsense_server.update_buffer((unsigned char*)&depth_scale, 9 * 4, 4);
它们在功能上是相同的(我认为?)。
第一个代码创建一个数组,添加一个 Server 对象,并根据 0 数组索引更新缓冲区。由于 i
第二个代码在没有数组的情况下执行相同的操作。
像这样访问数组中的线程对象有问题吗?
第一个代码未能正确创建 TCP 服务器,它不响应消息并挂起。第二个代码成功。
【问题讨论】:
-
emplace_back中有复制操作。您可能希望在“放置”服务器时对其进行初始化,然后运行 realsense_server_arr.back().init_listener_thread();
-
你应该把服务器的代码放在这里,因为链接可能会过时,你的问题对其他用户来说毫无用处。
-
@AdrielJr 你抓住它真是太棒了。这正是问题所在。似乎我无法摆脱从 Python 专家到优秀 C++ 程序员的尝试……很多像这样的错综复杂的东西,如果不完全阅读 C++ 书籍可能无法学习
-
@AdrielJr 但是一个问题是,在我做出您建议的更改之后,如果我将“i