📄 list6-3.cpp
字号:
#include <dirent.h>
#include <set.h>
#include <cstring.h>
#include <fstream.h>
#include <algo.h>
#include <string.h>
#include <list.h>
#include <stack.h>
#include <stddef.h>
#include <process.h>
#define INCL_DOSPROCESS
#define INCL_DOSSEMAPHORES
#include <os2.h>
queue< list<string> > TextFiles;
set<string,less<string> > KeyWords;
set<string,less<string> > SearchWords;
void threadA(void *X);
HMTX SemHandle;
HEV SemEventHandle;
string InFile;
string OutFile;
void threadA(void *X)
{
string Temp;
string FileName;
less<string> Comp;
ifstream In;
ofstream Out;
In.open(InFile.c_str());
Out.open(OutFile.c_str());
while(!In.eof())
{
In >> Temp;
if(!In.eof()){
KeyWords.insert(Temp);
}
}
In.close();
DosWaitEventSem(SemEventHandle,SEM_INDEFINITE_WAIT);
while(!TextFiles.empty())
{
DosRequestMutexSem(SemHandle,5000);
FileName = TextFiles.front();
TextFiles.pop();
DosReleaseMutexSem(SemHandle);
In.open(FileName.c_str());
SearchWords.erase(SearchWords.begin(),SearchWords.end());
while(!In.eof() && In.good())
{
In >> Temp;
SearchWords.insert(Temp);
}
In.close();
if(includes(SearchWords.begin(),SearchWords.end(),
KeyWords.begin(),KeyWords.end(),Comp)){
DosRequestMutexSem(SemHandle,5000);
cout << "Thread A match found in " << FileName << endl;
Out << FileName << endl;
DosReleaseMutexSem(SemHandle);
}
}
Out.close();
}
void main(int argc, char *argv[])
{
DIR *DirP;
unsigned long Result = 0;
struct dirent *EntryP;
DirP = opendir(argv[1]);
InFile = argv[2];
OutFile = argv[3];
if(argc == 4){
string Temp;
DosCreateMutexSem(NULL,&SemHandle,0,0);
DosCreateEventSem(NULL,&SemEventHandle,0,0);
Result = _beginthread(threadA,8192,NULL);
if(DirP == NULL){
cerr << " Could Not Open " << argv[1] << endl;
exit(1);
}
do{
EntryP = readdir(DirP);
if(EntryP){
Temp = EntryP->d_name;
if(Temp.contains(".TXT")){
DosRequestMutexSem(SemHandle,5000);
cout << "Found " << EntryP->d_name << " in Main Thread " << endl;
TextFiles.push(EntryP->d_name);
DosReleaseMutexSem(SemHandle);
DosPostEventSem(SemEventHandle);
}
}
}while(EntryP);
closedir(DirP);
DosWaitThread(&Result,DCWW_WAIT);
DosCloseMutexSem(SemHandle);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -