gpt4 book ai didi

c++ - 在后台执行功能?我需要为此线程吗? C++

转载 作者:太空宇宙 更新时间:2023-11-04 09:02:17 33 4
gpt4 key购买 nike

我试图自动化一些数据输入,所以我实现了一个 tcp 客户端和服务器,客户端将发送文件名,然后服务器将进入一个共享文件夹并将该文件导入数据库。

我的问题是文件名可以比“导入数据库”更快的速度发送。所以我做了一个队列(我不确定如何设置它的大小)然后我将文件名推送到队列中然后执行

PushToDatabase(filename);

我想做的是:

queue<string> q;
char *data = new char[1024];
ReadFromClient(data);
//now 'data' has a filename
q.push(data);
PushToDatabase(q.front()); // I want to execute this in the background
q.pop();

我不确定我是否需要实现线程来完成这项工作我也不知道如何在 c++ 中完成

还有其他想法吗??

最佳答案

根据您正在处理的文件数量,您应该查看 ring buffers .您可以分配一个固定的大小,并且如果实现得当,应该能够连续读取和写入它而不会出现缓冲区溢出/不足运行问题。我认为 boost 有一个你可以使用的循环缓冲区容器,但你需要有互斥锁来确保它是同步的和线程安全的。这将确保您不会同时读取和写入相同的内存位置或更改其他线程中的变量(因为线程使用共享内存空间)。您可以轮询环形缓冲区以查看是否有任何新数据要使用信号量处理,这也将消除上面概述的缓冲区溢出/不足运行问题。您还应该查看用于编写将在线程之间共享的变量的 std::atomic 容器,这样您就可以在两个线程尝试写入同一个变量时消除任何竞争条件。

关于c++ - 在后台执行功能?我需要为此线程吗? C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18877422/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com