pthread_create缓冲区大小。不够?

时间:2011-12-12 17:18:23

标签: c++ pthreads buffer

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

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

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

PD:我的日志没有显示任何内容,我在cout的第一行放了一个function,但由于我的程序在发生之前就崩溃了,因此永远不会被重命。

谢谢大家!

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

    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 个答案:

答案 0 :(得分:1)

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

1)分配一个new对象/结构,其中包含新线程所需的信息。

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

3)线程完成访问信息后,delete对象/结构。

如果你向一个线程传递指向某个东西的指针,你必须确保指针保持有效(并且除非已同步,否则它的内容不会被修改),直到新线程完成为止。