gpt4 book ai didi

c++ - 你如何在类和命名空间内的 linux 中克隆()?

转载 作者:行者123 更新时间:2023-11-28 03:52:31 27 4
gpt4 key购买 nike

我正在学习操作系统入门类(class),我们将在 Linux 中使用 clone() 调用来创建线程,然后用它们做一些事情。我似乎根本无法使用 clone()。

我已将我的代码结构化为一个类(称为Homework),该类位于该类(Course)的命名空间中。这可能是问题所在,因为这是我第一次真正使用 namespace 关键字。我正在尝试使用我很少做的事情来变得更有经验,所以如果我犯了一个愚蠢的错误,就这样吧。

我在网上找到了一些文章,但帮助不大。我已经阅读了手册页,但我想我没有足够的经验来理解问题所在。一天!感谢您的帮助:)

我想要在类中捕获克隆的方法:

// -- Header -- //  
namespace _Course_ {
class _Homework_ {
...
int threadCatch(void *);
...
};
}

// -- Source -- //
namespace _Course_ {
void _Homework_::threadTest(void) {
...
// From web article
void **childStack;
childStack = ( void **) malloc(KILOBYTE);
clone(threadCatch, childStack, CLONE_VM | CLONE_FILES, NULL);
...
}

int _Homework_::threadCatch(void * ){
cout << getpid() << " cloned." << endl;
exit(0);
}
}

是我目前拥有的。我尝试了不同的方法(将捕手从类中取出,然后是命名空间)。它被编译了两次,但是当我在 make clean 之后尝试重新编译时,它告诉我函数 (threadCreate) 在多个位置声明。由于这些奇怪的错误,我确定我做错了什么,而不是破解它,我会提出一些意见。我应该做什么,或者接下来我应该阅读什么?谢谢!

最佳答案

将您的 catch 函数定义为静态类函数。

static int threadCatch(void *);

此外(您可能不需要这个,但为了以防万一,我会在这里说)您可能还需要使用范围解析运算符将其发送到 clone()。我不这么认为,因为你已经在 Homework 类中使用它了。但我这样说是为了以防万一,它可能会对你有所帮助。

clone(Homework::threadCatch, childStack, CLONE_VM | CLONE_FILES, NULL);

关于c++ - 你如何在类和命名空间内的 linux 中克隆()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4950355/

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