我正在尝试使用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());
}
}
答案 0 :(得分:1)
遵循此模式以避免出现问题:
1)分配一个new
对象/结构,其中包含新线程所需的信息。
2)调用pthread_create
向其传递指向新对象的指针。
3)线程完成访问信息后,delete
对象/结构。
如果你向一个线程传递指向某个东西的指针,你必须确保指针保持有效(并且除非已同步,否则它的内容不会被修改),直到新线程完成为止。