void KConfigPropagator::commit() { updateChanges(); Change *c; for( c = mChanges.first(); c; c = mChanges.next() ) { c->apply(); } }
void FileMon::update() { #ifdef WIN32 MsgWaitForMultipleObjectsEx(0,NULL,0,QS_ALLINPUT,MWMO_ALERTABLE); // DWORD dwWaitResult = WaitForSingleObject(ghMutex,INFINITE); while(true) { if(dwWaitResult==WAIT_OBJECT_0) { updateChanges(); if(!ReleaseMutex(ghMutex)) { std::cout << "FileMon : Release mutex err.\n"; } break; } else if(dwWaitResult==WAIT_ABANDONED) { break; } } #endif #ifdef LINUX if(!notify) { return; } const int bufSize=((sizeof(struct inotify_event)+FILENAME_MAX)*1024); fd_set mDescriptorSet; FD_ZERO(&mDescriptorSet); FD_SET(notify,&mDescriptorSet); struct timeval mTimeOut; mTimeOut.tv_sec = 0; mTimeOut.tv_usec = 0; int ret = select(notify + 1,&mDescriptorSet,0,0,&mTimeOut); if(ret < 0) { perror("select"); } else if(FD_ISSET(notify,&mDescriptorSet)) { ssize_t len,i = 0; char action[81+FILENAME_MAX] ={ 0 }; char buff[bufSize] ={ 0 }; len = read(notify,buff,bufSize); while(i < len) { struct inotify_event *pevent = (struct inotify_event *)&buff[i]; std::string n=watchMap[pevent->wd]+"/"+std::string(pevent->name); time_t t=time(0); if(IN_MOVED_TO & pevent->mask || IN_CREATE & pevent->mask) { changeTimes.insert(std::make_pair(n,t)); } else if(IN_CLOSE_WRITE & pevent->mask) { changeTimes.insert(std::make_pair(n,t)); } else if(IN_MOVED_FROM & pevent->mask || IN_DELETE & pevent->mask) { } i += sizeof(struct inotify_event) + pevent->len; } } updateChanges(); #endif }