gpt4 book ai didi

c++ - pthread_create 缓冲区大小。不够?

转载 作者:行者123 更新时间:2023-11-28 08:13:11 24 4
gpt4 key购买 nike

我正在尝试使用 pthread_create 函数创建一个线程。电话是这样的:res pthread_create(&threadID, &atributte, function, argument)

res 值始终是 0 这意味着 pthread_create 启动线程的权利。我认为问题在于最后一个参数(argument)。这是一个太长的字符串,我认为这会导致我的程序崩溃,因为如果我尝试使用较短的字符串,一切都会正确并正确结束。

我想知道 pthread_create 是否创建了一个具有一定内存量的线程,如果你们中有人知道这个数量。

PD:我的日志没有显示任何内容,我在 function 的第一行放置了一个 cout 但从未被读取,因为我的程序在它发生之前就崩溃了。

谢谢大家!

编辑:其余代码,我如何创建线程。

    void znkModulePlugin::createMainProcess(void* mod){
znkModulePlugin* module = static_cast<znkModulePlugin*>(mod);
try{
int res = 0;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
res = pthread_create(&threadID, &attr, znkModulePlugin::launchThread, module);
}catch(exception e){
stringstream log_msg;
log_msg << " CRIT znkModulePlugin::createMainProcess() -> Critical Error: " << e.what() << ". Reseting Node.";
logData(log_msg.str());
}

最佳答案

遵循此模式以避免出现问题:

1) 分配一个新的对象/结构来保存新线程需要的信息。

2) 调用 pthread_create 传递一个指向新对象的指针。

3) 当线程访问完信息后,删除对象/结构。

如果您向线程传递指向某物的指针,您必须确保该指针保持有效(并且其内容未被修改,除非同步)直到新线程完成它。

关于c++ - pthread_create 缓冲区大小。不够?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8478160/

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