MS

fold
принимает что-то похожее на функцию/замыкание, которое выглядит как fn(a: T, b: T) -> T
Size: a a a
MS
fold
принимает что-то похожее на функцию/замыкание, которое выглядит как fn(a: T, b: T) -> T
MS
MS
d
class NonLockLoopTask {
UINT_PTR timID;
static void CALLBACK yieldTimer(HWND, UINT, UINT_PTR, DWORD) {
ExecutionThread::getCurrentThread().yieldTasks();
}
public:
NonLockLoopTask() : timID(0) {}
NonLockLoopTask(const NonLockLoopTask&) : NonLockLoopTask() {}
NonLockLoopTask(NonLockLoopTask&& src) : timID(src.timID){
src.timID = 0;
}
NonLockLoopTask& operator=(const NonLockLoopTask&) {
timID = 0;
return *this;
}
NonLockLoopTask& operator=(NonLockLoopTask&& src) {
std::swap(timID, src.timID);
return *this;
}
~NonLockLoopTask() { if (timID) KillTimer(NULL, timID); }
bool operator()() {
MSG msg;
if (!timID) {
timID = SetTimer(NULL, 0, 10, yieldTimer);
}
while (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) {
if (msg.message == WM_QUIT) {
ExecutionThread::getCurrentThread().exit(msg.wParam);
return false;
}
if (!(msg.message == WM_TIMER || msg.wParam == timID)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return true;
}
};
L
Fn
-подобные трейты.MS
MS
class NonLockLoopTask {
UINT_PTR timID;
static void CALLBACK yieldTimer(HWND, UINT, UINT_PTR, DWORD) {
ExecutionThread::getCurrentThread().yieldTasks();
}
public:
NonLockLoopTask() : timID(0) {}
NonLockLoopTask(const NonLockLoopTask&) : NonLockLoopTask() {}
NonLockLoopTask(NonLockLoopTask&& src) : timID(src.timID){
src.timID = 0;
}
NonLockLoopTask& operator=(const NonLockLoopTask&) {
timID = 0;
return *this;
}
NonLockLoopTask& operator=(NonLockLoopTask&& src) {
std::swap(timID, src.timID);
return *this;
}
~NonLockLoopTask() { if (timID) KillTimer(NULL, timID); }
bool operator()() {
MSG msg;
if (!timID) {
timID = SetTimer(NULL, 0, 10, yieldTimer);
}
while (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) {
if (msg.message == WM_QUIT) {
ExecutionThread::getCurrentThread().exit(msg.wParam);
return false;
}
if (!(msg.message == WM_TIMER || msg.wParam == timID)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return true;
}
};
d
MS
d
MS
d
MS
MS
d
MS
MS
d
MS
L