Pthread_create缓冲区大小.不够的
pthread_create buffer size. Not enough?
我试图创建一个具有pthread_create
函数的线程。呼叫是这样的:res pthread_create(&threadID, &atributte, function, argument)
res
的值总是0
,这意味着pthread_create启动线程的权利。问题,我认为,是在最后一个参数(参数)。这是一个太长的字符串,我认为这会使我的程序崩溃,因为如果我尝试使用更短的字符串,它都是正确的,并正确结束。
我想知道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)分配一个new
对象/结构体来保存新线程需要的信息。
2)调用pthread_create
,传递一个指向新对象的指针。
3)当线程完成对信息的访问,delete
对象/结构。
如果你给一个线程传递一个指针,你必须确保这个指针保持有效(除非同步,否则它的内容不会被修改),直到新线程完成它。
相关文章:
- C++字符*缓冲区的大小
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- ostream过载时的缓冲区冲洗
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- Xaudio2在更改缓冲区或循环时弹出声音
- 为什么我在leetcode上收到AddressSanitizer:地址0x602000000058上的堆缓冲区溢出错误
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)
- 多线程双缓冲区
- Android P-9.0.0_r53 Logcat主缓冲区超出定义大小
- 套接字读取后,我在缓冲区中看到意外输入
- std::带有自定义缓冲区的 iostream 不允许我写入
- 从返回的顶点缓冲区查询顶点结构
- Vulkan 中的动态顶点缓冲区格式设置
- OpenGL 16 位模板缓冲区?
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 在 openGL 中多次绑定缓冲区
- 为什么 SDL2 为音频样本提供的缓冲区不够大
- Pthread_create缓冲区大小.不够的