gpt4 book ai didi

c++ - 我的线程程序有什么问题?

转载 作者:行者123 更新时间:2023-11-30 02:49:23 26 4
gpt4 key购买 nike

我有以下代码,应该使用 .NEF 扩展名进行处理。

#include <iostream>
#include <regex>
#include <pthread.h>
#include <dirent.h>

using namespace std;

void *workHorse(void*);

int main (int argc, char *argv[]){
pthread_t t1;
int rc, pos1;
DIR *dir;
struct dirent *ent;
regex e("(.*)(\\.)(NEF|nef)");
if ((dir = opendir (".")) != NULL) {
string fn1;
while ((ent = readdir (dir))!=NULL){
fn1.assign(ent->d_name);
if (regex_match ( fn1, e )){
cout<<"F :"<<fn1.c_str()<<" "<<endl;
if (rc=pthread_create( &t1, NULL, &workHorse, (void*)&fn1)){
cout<<"Error creating threads "<<rc<<endl;
exit(-1);
}
}
}
}
return 0;
}

void *workHorse(void *fileName){
int ret;
cout<<"W :"<<((string*)fileName)->c_str()<<endl;
pthread_exit(NULL);
}

目录中只有一个扩展名为.NEF 的文件。我的预期输出是 -

F :DSC_0838.NEF 
W :DSC_0838.NEF

但是,我明白了

F :DSC_0838.NEF 
W :RGBbmp.bmp

RGBbmp.bmp 是同一目录中的另一个文件。我的代码有什么问题?为什么它没有按预期工作?

上面的代码是用-编译的

g++ tmp.cpp -pthread --std=c++11

最佳答案

fn1 的地址在主线程和您创建的辅助 p_thread 之间共享。当新线程启动时,主线程更改“fn1”内存地址中的值,辅助线程读取不同文件的名称(因为在主线程中 fn1 现在有了新值)。

您需要创建传递给辅助线程的字符串的拷贝,或者您需要同步读/写,我推荐前者,因为它更容易。

在这一行中:如果 (rc=pthread_create( &t1, NULL, &workHorse, (void*)&fn1))

您正在传递 fn1 的地址,然后该值在主循环中更改为一些其他文件名,当胎面出现时,它现在在 RGBbmp.bmp 中

关于c++ - 我的线程程序有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21245701/

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