#include
#include
#include
#include
#include
#include
#define THREAD_NUM 25
typedef struct
{undefined
FILE *_fp
int _nThreadId//第几个线程
sem_t *_semLock
}IDD_THREAD_PARAM
void *ThreadFunc(void *args)
{undefined
char sLine[100+1]
FILE *fpRead = ((IDD_THREAD_PARAM *)args)->_fp
sem_t *semLock = ((IDD_THREAD_PARAM *)args)->_semLock
int nId = ((IDD_THREAD_PARAM *)args)->_nThreadId
sem_wait(semLock)
while(!feof(fpRead))
{undefined
memset(sLine,0,sizeof(sLine))
fgets(sLine,100,fpRead)
fprintf(stderr,"Thread ID-%d:%s",nId,sLine)
}
sem_post(semLock)
}
int main()
{undefined
pthread_t *pThreads
sem_t semLock
pThreads = (pthread_t *)malloc(THREAD_NUM*sizeof(pthread_t))
sem_init(&semLock,0,1)
FILE *fp = fopen("test.txt","r")
//开始线程循环
IDD_THREAD_PARAM param
for(int i=0i
{undefined
memset(param,0,sizeof(IDD_THREAD_PARAM))
param._fp = fp
param._nThreadId = i
param._semLock = &semLock
pthread_create((pThreads+i),NULL,ThreadFunc,param)
}
for(int i=0i
pthread_join(*(pThreads+i),NULL)
free(pThreads)
pThreads = NULL
fclose(fp)
fp = NULL
return 0
}
按照你这个说法,要同时启动80-90个线程,你不怕电脑崩溃呀。。我以前做过一个类似的程序,我给你思路,但是不一定适用你这里需要的。你看下先
因为担心线程抢占资源,所以,在启动线程之前,先做资源分配
1、读取所有的文件名,按照需求,分成90个字符串数组
2、启动thread线程或者delegate委托事件来执行文件的读取,传递的参数就是上面的数组中的一个
3、线程中读取文件列表的方法。这个要看你要做什么了。
我不知道你读取文件要做什么,如果要插入资料库的话,你还得考虑不同线程读取资料库会不会锁表。具体看你的需求吧
参考如下:using System.threading
Metux m=new Metux()
//假设你的 *** 作XML文件的方法为UpdateXml
void UpdataXml()
{
m.WaitOne()//当一个线程正在使用该方法的时候,锁定该方法,使其他线程处于等待状态
//...对XML的 *** 作
m.ReleaseMetux()//使用完了,释放锁,让其他线程继续使用
}
[code=C#]
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)