gpt4 book ai didi

C++ 静态类成员指的是自身

转载 作者:行者123 更新时间:2023-11-30 01:29:45 25 4
gpt4 key购买 nike

我很好奇这是否是我能做的事情:

using namespace tthread;
class E_thread {
static std::list<E_thread*> all_threads;
thread th;
E_messageQueue queue;
public:
E_thread(void (*threadFunction)(void *), void * threadFuncArg) {
all_threads.push_back(this);
th = thread(threadFunction,threadFuncArg);
}
~E_thread() {
queue.push_terminate_thread_message();
th.join();
all_threads.remove(this);
}
};

我的目的是让任何线程都可以轻松地生成新线程或向另一个线程发送消息,并且线程列表也能够自行清理。据我了解,我可以替换 all_threads与全局 std::list<E_thread*>如果我愿意的话,它的目的是相同的,但这不是获得那种“全局性”的更简洁的方法吗?

对此有点不安的是我没有强制我的新线程有一个消息读取循环,以便能够处理终止消息。

最佳答案

这很好,主要是。您需要使用某种互斥锁来保护对 all_threads 的访问(读取或修改两者)。此外,如果您在程序执行过程中经常销毁线程,则最好使用 ::std::set

另外,我有点质疑是否有任何类型的全局变量。我认为如果您有一个“线程管理器”对象并在您创建的线程中传递,或者可能有一个跟踪它创建的所有线程的线程工厂,那会更干净。

全局变量使程序更难测试,并使它们更脆弱且以后无法修改。

关于C++ 静态类成员指的是自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5386133/

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