本文整理汇总了C++中WStrVec::IterNext方法的典型用法代码示例。如果您正苦于以下问题:C++ WStrVec::IterNext方法的具体用法?C++ WStrVec::IterNext怎么用?C++ WStrVec::IterNext使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类WStrVec
的用法示例。
在下文中一共展示了WStrVec::IterNext方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: cs
static void CALLBACK ReadDirectoryChangesNotification(DWORD errCode,
DWORD bytesTransfered, LPOVERLAPPED overlapped)
{
ScopedCritSec cs(&g_threadCritSec);
OverlappedEx *over = (OverlappedEx*)overlapped;
WatchedDir* wd = (WatchedDir*)over->data;
lf(L"ReadDirectoryChangesNotification() dir: %s, numBytes: %d", wd->dirPath, (int)bytesTransfered);
CrashIf(wd != wd->overlapped.data);
if (errCode == ERROR_OPERATION_ABORTED) {
lf(" ERROR_OPERATION_ABORTED");
DeleteWatchedDir(wd);
InterlockedDecrement(&gRemovalsPending);
return;
}
// This might mean overflow? Not sure.
if (!bytesTransfered)
return;
FILE_NOTIFY_INFORMATION *notify = (FILE_NOTIFY_INFORMATION*)wd->buf;
// collect files that changed, removing duplicates
WStrVec changedFiles;
for (;;) {
ScopedMem<WCHAR> fileName(str::DupN(notify->FileName, notify->FileNameLength / sizeof(WCHAR)));
// files can get updated either by writing to them directly or
// by writing to a .tmp file first and then moving that file in place
// (the latter only yields a RENAMED action with the expected file name)
if (notify->Action == FILE_ACTION_MODIFIED || notify->Action == FILE_ACTION_RENAMED_NEW_NAME) {
if (!changedFiles.Contains(fileName)) {
lf(L"ReadDirectoryChangesNotification() FILE_ACTION_MODIFIED, for '%s'", fileName);
changedFiles.Append(fileName.StealData());
} else {
lf(L"ReadDirectoryChangesNotification() eliminating duplicate notification for '%s'", fileName);
}
} else {
lf(L"ReadDirectoryChangesNotification() action=%d, for '%s'", (int)notify->Action, fileName);
}
// step to the next entry if there is one
DWORD nextOff = notify->NextEntryOffset;
if (!nextOff)
break;
notify = (FILE_NOTIFY_INFORMATION *)((char*)notify + nextOff);
}
StartMonitoringDirForChanges(wd);
for (WCHAR **f = changedFiles.IterStart(); f; f = changedFiles.IterNext()) {
NotifyAboutFile(wd, *f);
}
}
示例2: cs
static void CALLBACK ReadDirectoryChangesNotification(DWORD errCode,
DWORD bytesTransfered, LPOVERLAPPED overlapped)
{
ScopedCritSec cs(&g_threadCritSec);
OverlappedEx *over = (OverlappedEx*)overlapped;
WatchedDir* wd = (WatchedDir*)over->data;
lf(L"ReadDirectoryChangesNotification() dir: %s, numBytes: %d", wd->dirPath, (int)bytesTransfered);
CrashIf(wd != wd->overlapped.data);
if (errCode == ERROR_OPERATION_ABORTED) {
lf(" ERROR_OPERATION_ABORTED");
DeleteWatchedDir(wd);
return;
}
// This might mean overflow? Not sure.
if (!bytesTransfered)
return;
FILE_NOTIFY_INFORMATION *notify = (FILE_NOTIFY_INFORMATION*)wd->buf;
// collect files that changed, removing duplicates
WStrVec changedFiles;
for (;;) {
WCHAR *fileName = str::DupN(notify->FileName, notify->FileNameLength / sizeof(WCHAR));
if (notify->Action == FILE_ACTION_MODIFIED) {
if (!changedFiles.Contains(fileName)) {
lf(L"ReadDirectoryChangesNotification() FILE_ACTION_MODIFIED, for '%s'", fileName);
changedFiles.Append(fileName);
fileName = NULL;
} else {
lf(L"ReadDirectoryChangesNotification() eliminating duplicate notification for '%s'", fileName);
}
} else {
lf(L"ReadDirectoryChangesNotification() action=%d, for '%s'", (int)notify->Action, fileName);
}
free(fileName);
// step to the next entry if there is one
DWORD nextOff = notify->NextEntryOffset;
if (!nextOff)
break;
notify = (FILE_NOTIFY_INFORMATION *)((char*)notify + nextOff);
}
StartMonitoringDirForChanges(wd);
for (WCHAR **f = changedFiles.IterStart(); f; f = changedFiles.IterNext()) {
NotifyAboutFile(wd, *f);
}
}
示例3: WinMain
//.........这里部分代码省略.........
CrashIf(hInstance != GetModuleHandle(NULL));
if (!InstanceInit(nCmdShow))
goto Exit;
if (i.hwndPluginParent) {
if (!SetupPluginMode(i))
goto Exit;
}
if (i.printerName) {
// note: this prints all PDF files. Another option would be to
// print only the first one
for (size_t n = 0; n < i.fileNames.Count(); n++) {
bool ok = PrintFile(i.fileNames.At(n), i.printerName, !i.silent, i.printSettings);
if (!ok)
retCode++;
}
--retCode; // was 1 if no print failures, turn 1 into 0
goto Exit;
}
bool showStartPage = i.fileNames.Count() == 0 && gGlobalPrefs->rememberOpenedFiles && gGlobalPrefs->showStartPage;
if (showStartPage) {
// make the shell prepare the image list, so that it's ready when the first window's loaded
SHFILEINFO sfi;
SHGetFileInfo(L".pdf", 0, &sfi, sizeof(sfi), SHGFI_SYSICONINDEX | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES);
}
if (gGlobalPrefs->reopenOnce) {
WStrVec moreFileNames;
ParseCmdLine(gGlobalPrefs->reopenOnce, moreFileNames);
moreFileNames.Reverse();
for (WCHAR **fileName = moreFileNames.IterStart(); fileName; fileName = moreFileNames.IterNext()) {
i.fileNames.Append(*fileName);
}
moreFileNames.RemoveAt(0, moreFileNames.Count());
str::ReplacePtr(&gGlobalPrefs->reopenOnce, NULL);
}
HANDLE hMutex = NULL;
HWND hPrevWnd = NULL;
if (i.printDialog || i.stressTestPath || gPluginMode) {
// TODO: pass print request through to previous instance?
}
else if (i.reuseDdeInstance) {
hPrevWnd = FindWindow(FRAME_CLASS_NAME, NULL);
}
else if (gGlobalPrefs->reuseInstance || gGlobalPrefs->useTabs) {
hPrevWnd = FindPrevInstWindow(&hMutex);
}
if (hPrevWnd) {
for (size_t n = 0; n < i.fileNames.Count(); n++) {
OpenUsingDde(hPrevWnd, i.fileNames.At(n), i, 0 == n);
}
goto Exit;
}
WindowInfo *win = NULL;
for (size_t n = 0; n < i.fileNames.Count(); n++) {
win = LoadOnStartup(i.fileNames.At(n), i, !win);
if (!win) {
retCode++;
continue;
}
if (i.printDialog)