C程序只在调试时写入文件
我正在编写一个简单的代码来测试线程池。我有一个客户端,它通过不同的端口向服务器发送数据行。 一些线程接收数据,然后将其发送给其他线程进行处理。 目前,我所做的唯一处理就是将数据写入一个文件 下面是工作线程的代码C程序只在调试时写入文件,c,multithreading,file,threadpool,C,Multithreading,File,Threadpool,我正在编写一个简单的代码来测试线程池。我有一个客户端,它通过不同的端口向服务器发送数据行。 一些线程接收数据,然后将其发送给其他线程进行处理。 目前,我所做的唯一处理就是将数据写入一个文件 下面是工作线程的代码 void* worker_thread(void* arg){ int i, workerNum; pthread_t worker_id = pthread_self(); char *ticket = (char*) arg; char dumpfil
void* worker_thread(void* arg){
int i, workerNum;
pthread_t worker_id = pthread_self();
char *ticket = (char*) arg;
char dumpfile[50];
for(i=0;i<10;i++)
if(pthread_equal(worker_id, id_pool[i]))
break;
if(10==i){
pthread_exit(NULL);
}
workerNum = i;
fprintf(stdout, "Worker [%d] busy\n",workerNum);
sprintf(dumpfile, "worker_%d.log",workerNum);
if(strlen(ticket)<4){
fprintf(stdout, "Worker [%d] RELEASED!!\n",workerNum);
poolStatus[workerNum] = 0;
pthread_mutex_unlock(&mutexes[workerNum]);
pthread_exit(NULL);
}
FILE *logFile = fopen(dumpfile, "a+");
// ticket[strlen(ticket)]
fprintf(logFile, "%s\n", ticket);
fclose(logFile);
sleep(workerNum+2);
poolStatus[workerNum] = 0;
fprintf(stdout, "Worker [%d] RELEASED!!\n",workerNum);
pthread_mutex_unlock(&mutexes[workerNum]);
pthread_exit(NULL);
}
void*辅助线程(void*arg){
int i,workerNum;
pthread_t worker_id=pthread_self();
字符*票证=(字符*)参数;
字符转储文件[50];
对于(i=0;i我相信我已经找到了问题
为了将消息从serverListener
thread传递到worker\u thread
,我使用了用于从套接字读取的缓冲区指针。问题是,在worker\u thread
可以处理它之前,serverListener
已将值重置为零(bzero(buf,BUFSIZE)
)!并且考虑到工作线程
只能在大小大于4时写入文件,因此它不会写入该文件。
所以为了解决我的问题,我更换了线路:
pthread_create(&id_pool[i], NULL, worker_thread, (void*)buf);
作者:
它成功了!!
仍然没有真正解释为什么它可以在调试模式下创建文件…您是否看到“Worker[%d]busy\n”在你的stdout中?是的!发送到stdout的所有消息都打印得很好。你如何调用worker\u thread
?你的问题缺少很多可能说明问题所在的代码。你是否阅读了编译器警告…?我没有任何编译警告
pthread_create(&id_pool[i], NULL, worker_thread, (void*)buf);
char *msg2send = strdup(buf);
pthread_create(&id_pool[i], NULL, worker_thread, (void*)msg2send);