C++ pthread_创建缓冲区大小。还不够?
我正在尝试使用C++ pthread_创建缓冲区大小。还不够?,c++,pthreads,buffer,C++,Pthreads,Buffer,我正在尝试使用pthread\u create函数创建线程。电话是这样的: respthread\u创建(&threadID,&atributte,函数,参数) res值始终为0,这意味着pthread\u create将正确启动线程。 我认为问题在于最后一个参数(参数)。这是一个太长的字符串,我认为这会使我的程序崩溃,因为如果我尝试使用一个较短的字符串,它就完全正确并且结束正确 我想知道pthread\u create是否创建了一个具有一定内存量的线程,你们是否知道这个内存量 PD:我的日志没
pthread\u create
函数创建线程。电话是这样的:
respthread\u创建(&threadID,&atributte,函数,参数)
res
值始终为0
,这意味着pthread\u create将正确启动线程。
我认为问题在于最后一个参数(参数)。这是一个太长的字符串,我认为这会使我的程序崩溃,因为如果我尝试使用一个较短的字符串,它就完全正确并且结束正确
我想知道pthread\u create
是否创建了一个具有一定内存量的线程,你们是否知道这个内存量
PD:我的日志没有显示任何内容,我在函数的第一行放了一个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());
}
void znkModulePlugin::createMainProcess(void*mod){
znkModulePlugin*模块=静态转换(mod);
试一试{
int res=0;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread\u attr\u setdetachstate(&attr,pthread\u CREATE\u distached);
res=pthread_create(&threadID,&attr,znkModulePlugin::launchThread,module);
}捕获(例外e){
stringstream log_msg;
log_msg遵循此模式以避免出现问题:
1) 分配一个包含新线程所需信息的new
对象/结构
2) 调用pthread\u create
向其传递指向新对象的指针
3) 当线程访问完信息后,delete
object/struct
如果向线程传递指向某个对象的指针,则必须确保该指针保持有效(除非同步,否则其内容不会修改)直到新线程完成它。你是否确保参数
指向的字符串在线程访问它之前没有被破坏?pthread\u create
不会为它自己分配内存;它只传递你给它的指针。你如何创建参数
?@MikeSeymour,你应该给出答案-最有可能是这种情况。是的,我可以在启动pthread\u create
之前键入该字符串,并且该字符串已完成!如果该字符串在我调用它之前被破坏,则我的较短字符串将发生这种情况。@Urien:说真的,发布更多代码。演示如何创建参数。