lib: Pass jobs to barrier::Thread as std::function
This commit is contained in:
parent
53356697d9
commit
d2c106db53
|
@ -34,7 +34,6 @@
|
||||||
|
|
||||||
#if SYSAPI_WIN32
|
#if SYSAPI_WIN32
|
||||||
#include "base/IEventQueue.h"
|
#include "base/IEventQueue.h"
|
||||||
#include "base/TMethodJob.h"
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
@ -229,8 +228,7 @@ App::handleIpcMessage(const Event& e, void*)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void App::run_events_loop()
|
||||||
App::runEventsLoop(void*)
|
|
||||||
{
|
{
|
||||||
m_events->loop();
|
m_events->loop();
|
||||||
|
|
||||||
|
|
|
@ -108,7 +108,7 @@ private:
|
||||||
protected:
|
protected:
|
||||||
void initIpcClient();
|
void initIpcClient();
|
||||||
void cleanupIpcClient();
|
void cleanupIpcClient();
|
||||||
void runEventsLoop(void*);
|
void run_events_loop();
|
||||||
|
|
||||||
IArchTaskBarReceiver* m_taskBarReceiver;
|
IArchTaskBarReceiver* m_taskBarReceiver;
|
||||||
bool m_suspended;
|
bool m_suspended;
|
||||||
|
|
|
@ -37,7 +37,6 @@
|
||||||
#include "base/TMethodEventJob.h"
|
#include "base/TMethodEventJob.h"
|
||||||
#include "base/log_outputters.h"
|
#include "base/log_outputters.h"
|
||||||
#include "base/EventQueue.h"
|
#include "base/EventQueue.h"
|
||||||
#include "base/TMethodJob.h"
|
|
||||||
#include "base/Log.h"
|
#include "base/Log.h"
|
||||||
#include "common/Version.h"
|
#include "common/Version.h"
|
||||||
|
|
||||||
|
@ -465,10 +464,7 @@ ClientApp::mainLoop()
|
||||||
|
|
||||||
#if defined(MAC_OS_X_VERSION_10_7)
|
#if defined(MAC_OS_X_VERSION_10_7)
|
||||||
|
|
||||||
Thread thread(
|
Thread thread([this](){ run_events_loop(); });
|
||||||
new TMethodJob<ClientApp>(
|
|
||||||
this, &ClientApp::runEventsLoop,
|
|
||||||
NULL));
|
|
||||||
|
|
||||||
// wait until carbon loop is ready
|
// wait until carbon loop is ready
|
||||||
OSXScreen* screen = dynamic_cast<OSXScreen*>(
|
OSXScreen* screen = dynamic_cast<OSXScreen*>(
|
||||||
|
|
|
@ -24,7 +24,6 @@ namespace barrier { class Screen; }
|
||||||
class Event;
|
class Event;
|
||||||
class Client;
|
class Client;
|
||||||
class NetworkAddress;
|
class NetworkAddress;
|
||||||
class Thread;
|
|
||||||
class ClientArgs;
|
class ClientArgs;
|
||||||
|
|
||||||
class ClientApp : public App {
|
class ClientApp : public App {
|
||||||
|
|
|
@ -34,7 +34,6 @@
|
||||||
#include "base/EventQueue.h"
|
#include "base/EventQueue.h"
|
||||||
#include "base/log_outputters.h"
|
#include "base/log_outputters.h"
|
||||||
#include "base/FunctionEventJob.h"
|
#include "base/FunctionEventJob.h"
|
||||||
#include "base/TMethodJob.h"
|
|
||||||
#include "base/IEventQueue.h"
|
#include "base/IEventQueue.h"
|
||||||
#include "base/Log.h"
|
#include "base/Log.h"
|
||||||
#include "base/TMethodEventJob.h"
|
#include "base/TMethodEventJob.h"
|
||||||
|
@ -797,10 +796,7 @@ ServerApp::mainLoop()
|
||||||
|
|
||||||
#if defined(MAC_OS_X_VERSION_10_7)
|
#if defined(MAC_OS_X_VERSION_10_7)
|
||||||
|
|
||||||
Thread thread(
|
Thread thread([this](){ run_events_loop(); });
|
||||||
new TMethodJob<ServerApp>(
|
|
||||||
this, &ServerApp::runEventsLoop,
|
|
||||||
NULL));
|
|
||||||
|
|
||||||
// wait until carbon loop is ready
|
// wait until carbon loop is ready
|
||||||
OSXScreen* screen = dynamic_cast<OSXScreen*>(
|
OSXScreen* screen = dynamic_cast<OSXScreen*>(
|
||||||
|
|
|
@ -42,14 +42,13 @@ bool StreamChunker::s_interruptFile = false;
|
||||||
Mutex* StreamChunker::s_interruptMutex = NULL;
|
Mutex* StreamChunker::s_interruptMutex = NULL;
|
||||||
|
|
||||||
void
|
void
|
||||||
StreamChunker::sendFile(
|
StreamChunker::sendFile(const char* filename,
|
||||||
char* filename,
|
|
||||||
IEventQueue* events,
|
IEventQueue* events,
|
||||||
void* eventTarget)
|
void* eventTarget)
|
||||||
{
|
{
|
||||||
s_isChunkingFile = true;
|
s_isChunkingFile = true;
|
||||||
|
|
||||||
std::fstream file(static_cast<char*>(filename), std::ios::in | std::ios::binary);
|
std::fstream file(filename, std::ios::in | std::ios::binary);
|
||||||
|
|
||||||
if (!file.is_open()) {
|
if (!file.is_open()) {
|
||||||
throw runtime_error("failed to open file");
|
throw runtime_error("failed to open file");
|
||||||
|
|
|
@ -25,10 +25,7 @@ class Mutex;
|
||||||
|
|
||||||
class StreamChunker {
|
class StreamChunker {
|
||||||
public:
|
public:
|
||||||
static void sendFile(
|
static void sendFile(const char* filename, IEventQueue* events, void* eventTarget);
|
||||||
char* filename,
|
|
||||||
IEventQueue* events,
|
|
||||||
void* eventTarget);
|
|
||||||
static void sendClipboard(
|
static void sendClipboard(
|
||||||
String& data,
|
String& data,
|
||||||
size_t size,
|
size_t size,
|
||||||
|
|
|
@ -28,7 +28,6 @@
|
||||||
#include "net/SocketMultiplexer.h"
|
#include "net/SocketMultiplexer.h"
|
||||||
#include "arch/XArch.h"
|
#include "arch/XArch.h"
|
||||||
#include "base/Log.h"
|
#include "base/Log.h"
|
||||||
#include "base/TMethodJob.h"
|
|
||||||
#include "base/TMethodEventJob.h"
|
#include "base/TMethodEventJob.h"
|
||||||
#include "base/EventQueue.h"
|
#include "base/EventQueue.h"
|
||||||
#include "base/log_outputters.h"
|
#include "base/log_outputters.h"
|
||||||
|
|
|
@ -1,43 +0,0 @@
|
||||||
/*
|
|
||||||
* barrier -- mouse and keyboard sharing utility
|
|
||||||
* Copyright (C) 2012-2016 Symless Ltd.
|
|
||||||
* Copyright (C) 2002 Chris Schoeneman
|
|
||||||
*
|
|
||||||
* This package is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* found in the file LICENSE that should have accompanied this file.
|
|
||||||
*
|
|
||||||
* This package is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "base/FunctionJob.h"
|
|
||||||
|
|
||||||
//
|
|
||||||
// FunctionJob
|
|
||||||
//
|
|
||||||
|
|
||||||
FunctionJob::FunctionJob(void (*func)(void*), void* arg) :
|
|
||||||
m_func(func),
|
|
||||||
m_arg(arg)
|
|
||||||
{
|
|
||||||
// do nothing
|
|
||||||
}
|
|
||||||
|
|
||||||
FunctionJob::~FunctionJob()
|
|
||||||
{
|
|
||||||
// do nothing
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
FunctionJob::run()
|
|
||||||
{
|
|
||||||
if (m_func != NULL) {
|
|
||||||
m_func(m_arg);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,39 +0,0 @@
|
||||||
/*
|
|
||||||
* barrier -- mouse and keyboard sharing utility
|
|
||||||
* Copyright (C) 2012-2016 Symless Ltd.
|
|
||||||
* Copyright (C) 2002 Chris Schoeneman
|
|
||||||
*
|
|
||||||
* This package is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* found in the file LICENSE that should have accompanied this file.
|
|
||||||
*
|
|
||||||
* This package is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include "base/IJob.h"
|
|
||||||
|
|
||||||
//! Use a function as a job
|
|
||||||
/*!
|
|
||||||
A job class that invokes a function.
|
|
||||||
*/
|
|
||||||
class FunctionJob : public IJob {
|
|
||||||
public:
|
|
||||||
//! run() invokes \c func(arg)
|
|
||||||
FunctionJob(void (*func)(void*), void* arg = NULL);
|
|
||||||
virtual ~FunctionJob();
|
|
||||||
|
|
||||||
// IJob overrides
|
|
||||||
virtual void run();
|
|
||||||
|
|
||||||
private:
|
|
||||||
void (*m_func)(void*);
|
|
||||||
void* m_arg;
|
|
||||||
};
|
|
|
@ -1,68 +0,0 @@
|
||||||
/*
|
|
||||||
* barrier -- mouse and keyboard sharing utility
|
|
||||||
* Copyright (C) 2012-2016 Symless Ltd.
|
|
||||||
* Copyright (C) 2002 Chris Schoeneman
|
|
||||||
*
|
|
||||||
* This package is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* found in the file LICENSE that should have accompanied this file.
|
|
||||||
*
|
|
||||||
* This package is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include "IJob.h"
|
|
||||||
|
|
||||||
//! Use a function as a job
|
|
||||||
/*!
|
|
||||||
A job class that invokes a member function.
|
|
||||||
*/
|
|
||||||
template <class T>
|
|
||||||
class TMethodJob : public IJob {
|
|
||||||
public:
|
|
||||||
//! run() invokes \c object->method(arg)
|
|
||||||
TMethodJob(T* object, void (T::*method)(void*), void* arg = NULL);
|
|
||||||
virtual ~TMethodJob();
|
|
||||||
|
|
||||||
// IJob overrides
|
|
||||||
virtual void run();
|
|
||||||
|
|
||||||
private:
|
|
||||||
T* m_object;
|
|
||||||
void (T::*m_method)(void*);
|
|
||||||
void* m_arg;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
inline
|
|
||||||
TMethodJob<T>::TMethodJob(T* object, void (T::*method)(void*), void* arg) :
|
|
||||||
m_object(object),
|
|
||||||
m_method(method),
|
|
||||||
m_arg(arg)
|
|
||||||
{
|
|
||||||
// do nothing
|
|
||||||
}
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
inline
|
|
||||||
TMethodJob<T>::~TMethodJob()
|
|
||||||
{
|
|
||||||
// do nothing
|
|
||||||
}
|
|
||||||
|
|
||||||
template <class T>
|
|
||||||
inline
|
|
||||||
void
|
|
||||||
TMethodJob<T>::run()
|
|
||||||
{
|
|
||||||
if (m_object != NULL) {
|
|
||||||
(m_object->*m_method)(m_arg);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -17,7 +17,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "base/log_outputters.h"
|
#include "base/log_outputters.h"
|
||||||
#include "base/TMethodJob.h"
|
|
||||||
#include "arch/Arch.h"
|
#include "arch/Arch.h"
|
||||||
#include "base/String.h"
|
#include "base/String.h"
|
||||||
#include "io/filesystem.h"
|
#include "io/filesystem.h"
|
||||||
|
|
|
@ -37,7 +37,6 @@
|
||||||
#include "base/Log.h"
|
#include "base/Log.h"
|
||||||
#include "base/IEventQueue.h"
|
#include "base/IEventQueue.h"
|
||||||
#include "base/TMethodEventJob.h"
|
#include "base/TMethodEventJob.h"
|
||||||
#include "base/TMethodJob.h"
|
|
||||||
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
@ -760,9 +759,7 @@ void
|
||||||
Client::onFileRecieveCompleted()
|
Client::onFileRecieveCompleted()
|
||||||
{
|
{
|
||||||
if (isReceivedFileSizeValid()) {
|
if (isReceivedFileSizeValid()) {
|
||||||
m_writeToDropDirThread = new Thread(
|
m_writeToDropDirThread = new Thread([this](){ write_to_drop_dir_thread(); });
|
||||||
new TMethodJob<Client>(
|
|
||||||
this, &Client::writeToDropDirThread));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -772,8 +769,7 @@ Client::handleStopRetry(const Event&, void*)
|
||||||
m_args.m_restartable = false;
|
m_args.m_restartable = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void Client::write_to_drop_dir_thread()
|
||||||
Client::writeToDropDirThread(void*)
|
|
||||||
{
|
{
|
||||||
LOG((CLOG_DEBUG "starting write to drop dir thread"));
|
LOG((CLOG_DEBUG "starting write to drop dir thread"));
|
||||||
|
|
||||||
|
@ -812,18 +808,13 @@ Client::sendFileToServer(const char* filename)
|
||||||
StreamChunker::interruptFile();
|
StreamChunker::interruptFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
m_sendFileThread = new Thread(
|
m_sendFileThread = new Thread([this, filename]() { send_file_thread(filename); });
|
||||||
new TMethodJob<Client>(
|
|
||||||
this, &Client::sendFileThread,
|
|
||||||
static_cast<void*>(const_cast<char*>(filename))));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void Client::send_file_thread(const char* filename)
|
||||||
Client::sendFileThread(void* filename)
|
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
char* name = static_cast<char*>(filename);
|
StreamChunker::sendFile(filename, m_events, this);
|
||||||
StreamChunker::sendFile(name, m_events, this);
|
|
||||||
}
|
}
|
||||||
catch (std::runtime_error& error) {
|
catch (std::runtime_error& error) {
|
||||||
LOG((CLOG_ERR "failed sending file chunks: %s", error.what()));
|
LOG((CLOG_ERR "failed sending file chunks: %s", error.what()));
|
||||||
|
|
|
@ -167,8 +167,8 @@ private:
|
||||||
void sendEvent(Event::Type, void*);
|
void sendEvent(Event::Type, void*);
|
||||||
void sendConnectionFailedEvent(const char* msg);
|
void sendConnectionFailedEvent(const char* msg);
|
||||||
void sendFileChunk(const void* data);
|
void sendFileChunk(const void* data);
|
||||||
void sendFileThread(void*);
|
void send_file_thread(const char* filename);
|
||||||
void writeToDropDirThread(void*);
|
void write_to_drop_dir_thread();
|
||||||
void setupConnecting();
|
void setupConnecting();
|
||||||
void setupConnection();
|
void setupConnection();
|
||||||
void setupScreen();
|
void setupScreen();
|
||||||
|
|
|
@ -28,7 +28,6 @@
|
||||||
#include "base/Event.h"
|
#include "base/Event.h"
|
||||||
#include "base/EventQueue.h"
|
#include "base/EventQueue.h"
|
||||||
#include "base/TMethodEventJob.h"
|
#include "base/TMethodEventJob.h"
|
||||||
#include "base/TMethodJob.h"
|
|
||||||
|
|
||||||
enum EIpcLogOutputter {
|
enum EIpcLogOutputter {
|
||||||
kBufferMaxSize = 1000,
|
kBufferMaxSize = 1000,
|
||||||
|
@ -54,8 +53,7 @@ IpcLogOutputter::IpcLogOutputter(IpcServer& ipcServer, EIpcClientType clientType
|
||||||
m_clientType(clientType)
|
m_clientType(clientType)
|
||||||
{
|
{
|
||||||
if (useThread) {
|
if (useThread) {
|
||||||
m_bufferThread = new Thread(new TMethodJob<IpcLogOutputter>(
|
m_bufferThread = new Thread([this](){ buffer_thread(); });
|
||||||
this, &IpcLogOutputter::bufferThread));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -142,8 +140,7 @@ IpcLogOutputter::isRunning()
|
||||||
return m_running;
|
return m_running;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void IpcLogOutputter::buffer_thread()
|
||||||
IpcLogOutputter::bufferThread(void*)
|
|
||||||
{
|
{
|
||||||
m_bufferThreadId = m_bufferThread->getID();
|
m_bufferThreadId = m_bufferThread->getID();
|
||||||
m_running = true;
|
m_running = true;
|
||||||
|
|
|
@ -92,7 +92,7 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void init();
|
void init();
|
||||||
void bufferThread(void*);
|
void buffer_thread();
|
||||||
std::string getChunk(size_t count);
|
std::string getChunk(size_t count);
|
||||||
void appendBuffer(const std::string& text);
|
void appendBuffer(const std::string& text);
|
||||||
bool isRunning();
|
bool isRunning();
|
||||||
|
|
|
@ -28,12 +28,10 @@
|
||||||
// Thread
|
// Thread
|
||||||
//
|
//
|
||||||
|
|
||||||
Thread::Thread(IJob* job)
|
Thread::Thread(const std::function<void()>& fun)
|
||||||
{
|
{
|
||||||
m_thread = ARCH->newThread([job](){ threadFunc(job); });
|
m_thread = ARCH->newThread([=](){ threadFunc(fun); });
|
||||||
if (m_thread == NULL) {
|
if (m_thread == NULL) {
|
||||||
// couldn't create thread
|
|
||||||
delete job;
|
|
||||||
throw XMTThreadUnavailable();
|
throw XMTThreadUnavailable();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -126,7 +124,7 @@ Thread::operator!=(const Thread& thread) const
|
||||||
return !ARCH->isSameThread(m_thread, thread.m_thread);
|
return !ARCH->isSameThread(m_thread, thread.m_thread);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Thread::threadFunc(IJob* job)
|
void Thread::threadFunc(const std::function<void()>& func)
|
||||||
{
|
{
|
||||||
// get this thread's id for logging
|
// get this thread's id for logging
|
||||||
IArchMultithread::ThreadID id;
|
IArchMultithread::ThreadID id;
|
||||||
|
@ -139,13 +137,12 @@ void Thread::threadFunc(IJob* job)
|
||||||
try {
|
try {
|
||||||
// go
|
// go
|
||||||
LOG((CLOG_DEBUG1 "thread 0x%08x entry", id));
|
LOG((CLOG_DEBUG1 "thread 0x%08x entry", id));
|
||||||
job->run();
|
func();
|
||||||
LOG((CLOG_DEBUG1 "thread 0x%08x exit", id));
|
LOG((CLOG_DEBUG1 "thread 0x%08x exit", id));
|
||||||
}
|
}
|
||||||
catch (XThreadCancel&) {
|
catch (XThreadCancel&) {
|
||||||
// client called cancel()
|
// client called cancel()
|
||||||
LOG((CLOG_DEBUG1 "caught cancel on thread 0x%08x", id));
|
LOG((CLOG_DEBUG1 "caught cancel on thread 0x%08x", id));
|
||||||
delete job;
|
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
catch (XThreadExit&) {
|
catch (XThreadExit&) {
|
||||||
|
@ -153,15 +150,10 @@ void Thread::threadFunc(IJob* job)
|
||||||
}
|
}
|
||||||
catch (XBase& e) {
|
catch (XBase& e) {
|
||||||
LOG((CLOG_ERR "exception on thread 0x%08x: %s", id, e.what()));
|
LOG((CLOG_ERR "exception on thread 0x%08x: %s", id, e.what()));
|
||||||
delete job;
|
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
catch (...) {
|
catch (...) {
|
||||||
LOG((CLOG_ERR "exception on thread 0x%08x: <unknown>", id));
|
LOG((CLOG_ERR "exception on thread 0x%08x: <unknown>", id));
|
||||||
delete job;
|
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
|
|
||||||
// done with job
|
|
||||||
delete job;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,8 +19,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "arch/IArchMultithread.h"
|
#include "arch/IArchMultithread.h"
|
||||||
|
#include <functional>
|
||||||
class IJob;
|
|
||||||
|
|
||||||
//! Thread handle
|
//! Thread handle
|
||||||
/*!
|
/*!
|
||||||
|
@ -44,10 +43,9 @@ class Thread {
|
||||||
public:
|
public:
|
||||||
//! Run \c adoptedJob in a new thread
|
//! Run \c adoptedJob in a new thread
|
||||||
/*!
|
/*!
|
||||||
Create and start a new thread executing the \c adoptedJob. The
|
Create and start a new thread executing the \c fun.
|
||||||
new thread takes ownership of \c adoptedJob and will delete it.
|
|
||||||
*/
|
*/
|
||||||
Thread(IJob* adoptedJob);
|
Thread(const std::function<void()>& fun);
|
||||||
|
|
||||||
//! Duplicate a thread handle
|
//! Duplicate a thread handle
|
||||||
/*!
|
/*!
|
||||||
|
@ -192,7 +190,7 @@ public:
|
||||||
private:
|
private:
|
||||||
Thread(ArchThread);
|
Thread(ArchThread);
|
||||||
|
|
||||||
static void threadFunc(IJob*);
|
static void threadFunc(const std::function<void()>& func);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ArchThread m_thread;
|
ArchThread m_thread;
|
||||||
|
|
|
@ -26,7 +26,6 @@
|
||||||
#include "arch/Arch.h"
|
#include "arch/Arch.h"
|
||||||
#include "arch/XArch.h"
|
#include "arch/XArch.h"
|
||||||
#include "base/Log.h"
|
#include "base/Log.h"
|
||||||
#include "base/TMethodJob.h"
|
|
||||||
#include "common/stdvector.h"
|
#include "common/stdvector.h"
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -58,8 +57,7 @@ SocketMultiplexer::SocketMultiplexer() :
|
||||||
m_jobListLockLocker(NULL)
|
m_jobListLockLocker(NULL)
|
||||||
{
|
{
|
||||||
// start thread
|
// start thread
|
||||||
m_thread = new Thread(new TMethodJob<SocketMultiplexer>(
|
m_thread = new Thread([this](){ service_thread(); });
|
||||||
this, &SocketMultiplexer::serviceThread));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SocketMultiplexer::~SocketMultiplexer()
|
SocketMultiplexer::~SocketMultiplexer()
|
||||||
|
@ -95,7 +93,7 @@ void SocketMultiplexer::addSocket(ISocket* socket, std::unique_ptr<ISocketMultip
|
||||||
if (i == m_socketJobMap.end()) {
|
if (i == m_socketJobMap.end()) {
|
||||||
// we *must* put the job at the end so the order of jobs in
|
// we *must* put the job at the end so the order of jobs in
|
||||||
// the list continue to match the order of jobs in pfds in
|
// the list continue to match the order of jobs in pfds in
|
||||||
// serviceThread().
|
// service_thread().
|
||||||
JobCursor j = m_socketJobs.insert(m_socketJobs.end(), std::move(job));
|
JobCursor j = m_socketJobs.insert(m_socketJobs.end(), std::move(job));
|
||||||
m_update = true;
|
m_update = true;
|
||||||
m_socketJobMap.insert(std::make_pair(socket, j));
|
m_socketJobMap.insert(std::make_pair(socket, j));
|
||||||
|
@ -125,7 +123,7 @@ SocketMultiplexer::removeSocket(ISocket* socket)
|
||||||
|
|
||||||
// remove job. rather than removing it from the map we put NULL
|
// remove job. rather than removing it from the map we put NULL
|
||||||
// in the list instead so the order of jobs in the list continues
|
// in the list instead so the order of jobs in the list continues
|
||||||
// to match the order of jobs in pfds in serviceThread().
|
// to match the order of jobs in pfds in service_thread().
|
||||||
SocketJobMap::iterator i = m_socketJobMap.find(socket);
|
SocketJobMap::iterator i = m_socketJobMap.find(socket);
|
||||||
if (i != m_socketJobMap.end()) {
|
if (i != m_socketJobMap.end()) {
|
||||||
if (*(i->second)) {
|
if (*(i->second)) {
|
||||||
|
@ -138,8 +136,7 @@ SocketMultiplexer::removeSocket(ISocket* socket)
|
||||||
unlockJobList();
|
unlockJobList();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void SocketMultiplexer::service_thread()
|
||||||
SocketMultiplexer::serviceThread(void*)
|
|
||||||
{
|
{
|
||||||
std::vector<IArchNetwork::PollEntry> pfds;
|
std::vector<IArchNetwork::PollEntry> pfds;
|
||||||
IArchNetwork::PollEntry pfd;
|
IArchNetwork::PollEntry pfd;
|
||||||
|
|
|
@ -67,7 +67,7 @@ private:
|
||||||
// and m_update while m_pollable and m_polling are true. all other
|
// and m_update while m_pollable and m_polling are true. all other
|
||||||
// threads must only modify these when m_pollable and m_polling are
|
// threads must only modify these when m_pollable and m_polling are
|
||||||
// false. only the service thread sets m_polling.
|
// false. only the service thread sets m_polling.
|
||||||
void serviceThread(void*);
|
void service_thread();
|
||||||
|
|
||||||
// create, iterate, and destroy a cursor. a cursor is used to
|
// create, iterate, and destroy a cursor. a cursor is used to
|
||||||
// safely iterate through the job list while other threads modify
|
// safely iterate through the job list while other threads modify
|
||||||
|
|
|
@ -28,7 +28,6 @@
|
||||||
#include "base/Log.h"
|
#include "base/Log.h"
|
||||||
#include "base/IEventQueue.h"
|
#include "base/IEventQueue.h"
|
||||||
#include "base/TMethodEventJob.h"
|
#include "base/TMethodEventJob.h"
|
||||||
#include "base/TMethodJob.h"
|
|
||||||
#include "base/IEventQueue.h"
|
#include "base/IEventQueue.h"
|
||||||
|
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
|
@ -599,13 +598,11 @@ MSWindowsDesks::deskLeave(Desk* desk, HKL keyLayout)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void MSWindowsDesks::desk_thread(Desk* desk)
|
||||||
MSWindowsDesks::deskThread(void* vdesk)
|
|
||||||
{
|
{
|
||||||
MSG msg;
|
MSG msg;
|
||||||
|
|
||||||
// use given desktop for this thread
|
// use given desktop for this thread
|
||||||
Desk* desk = static_cast<Desk*>(vdesk);
|
|
||||||
desk->m_threadID = GetCurrentThreadId();
|
desk->m_threadID = GetCurrentThreadId();
|
||||||
desk->m_window = NULL;
|
desk->m_window = NULL;
|
||||||
desk->m_foregroundWindow = NULL;
|
desk->m_foregroundWindow = NULL;
|
||||||
|
@ -749,8 +746,7 @@ MSWindowsDesks::Desk* MSWindowsDesks::addDesk(const std::string& name, HDESK hde
|
||||||
desk->m_name = name;
|
desk->m_name = name;
|
||||||
desk->m_desk = hdesk;
|
desk->m_desk = hdesk;
|
||||||
desk->m_targetID = GetCurrentThreadId();
|
desk->m_targetID = GetCurrentThreadId();
|
||||||
desk->m_thread = new Thread(new TMethodJob<MSWindowsDesks>(
|
desk->m_thread = new Thread([this, desk]() { desk_thread(desk); });
|
||||||
this, &MSWindowsDesks::deskThread, desk));
|
|
||||||
waitForDesk();
|
waitForDesk();
|
||||||
m_desks.insert(std::make_pair(name, desk));
|
m_desks.insert(std::make_pair(name, desk));
|
||||||
return desk;
|
return desk;
|
||||||
|
|
|
@ -220,7 +220,7 @@ private:
|
||||||
void deskMouseRelativeMove(SInt32 dx, SInt32 dy) const;
|
void deskMouseRelativeMove(SInt32 dx, SInt32 dy) const;
|
||||||
void deskEnter(Desk* desk);
|
void deskEnter(Desk* desk);
|
||||||
void deskLeave(Desk* desk, HKL keyLayout);
|
void deskLeave(Desk* desk, HKL keyLayout);
|
||||||
void deskThread(void* vdesk);
|
void desk_thread(Desk* desk);
|
||||||
|
|
||||||
// desk switch checking and handling
|
// desk switch checking and handling
|
||||||
Desk* addDesk(const std::string& name, HDESK hdesk);
|
Desk* addDesk(const std::string& name, HDESK hdesk);
|
||||||
|
|
|
@ -21,7 +21,6 @@
|
||||||
#include "platform/MSWindowsDesks.h"
|
#include "platform/MSWindowsDesks.h"
|
||||||
#include "mt/Thread.h"
|
#include "mt/Thread.h"
|
||||||
#include "arch/win32/ArchMiscWindows.h"
|
#include "arch/win32/ArchMiscWindows.h"
|
||||||
#include "base/FunctionJob.h"
|
|
||||||
#include "base/Log.h"
|
#include "base/Log.h"
|
||||||
#include "base/String.h"
|
#include "base/String.h"
|
||||||
#include "base/IEventQueue.h"
|
#include "base/IEventQueue.h"
|
||||||
|
@ -804,15 +803,14 @@ MSWindowsKeyState::fakeCtrlAltDel()
|
||||||
CloseHandle(hEvtSendSas);
|
CloseHandle(hEvtSendSas);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Thread cad(new FunctionJob(&MSWindowsKeyState::ctrlAltDelThread));
|
Thread cad([this](){ ctrl_alt_del_thread(); });
|
||||||
cad.wait();
|
cad.wait();
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void MSWindowsKeyState::ctrl_alt_del_thread()
|
||||||
MSWindowsKeyState::ctrlAltDelThread(void*)
|
|
||||||
{
|
{
|
||||||
// get the Winlogon desktop at whatever privilege we can
|
// get the Winlogon desktop at whatever privilege we can
|
||||||
HDESK desk = OpenDesktop("Winlogon", 0, FALSE, MAXIMUM_ALLOWED);
|
HDESK desk = OpenDesktop("Winlogon", 0, FALSE, MAXIMUM_ALLOWED);
|
||||||
|
|
|
@ -169,7 +169,7 @@ private:
|
||||||
typedef std::vector<HKL> GroupList;
|
typedef std::vector<HKL> GroupList;
|
||||||
|
|
||||||
// send ctrl+alt+del hotkey event on NT family
|
// send ctrl+alt+del hotkey event on NT family
|
||||||
static void ctrlAltDelThread(void*);
|
static void ctrl_alt_del_thread();
|
||||||
|
|
||||||
bool getGroups(GroupList&) const;
|
bool getGroups(GroupList&) const;
|
||||||
void setWindowGroup(SInt32 group);
|
void setWindowGroup(SInt32 group);
|
||||||
|
|
|
@ -36,11 +36,9 @@
|
||||||
#include "mt/Thread.h"
|
#include "mt/Thread.h"
|
||||||
#include "arch/win32/ArchMiscWindows.h"
|
#include "arch/win32/ArchMiscWindows.h"
|
||||||
#include "arch/Arch.h"
|
#include "arch/Arch.h"
|
||||||
#include "base/FunctionJob.h"
|
|
||||||
#include "base/Log.h"
|
#include "base/Log.h"
|
||||||
#include "base/IEventQueue.h"
|
#include "base/IEventQueue.h"
|
||||||
#include "base/TMethodEventJob.h"
|
#include "base/TMethodEventJob.h"
|
||||||
#include "base/TMethodJob.h"
|
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <Shlobj.h>
|
#include <Shlobj.h>
|
||||||
|
@ -354,17 +352,13 @@ MSWindowsScreen::leave()
|
||||||
forceShowCursor();
|
forceShowCursor();
|
||||||
|
|
||||||
if (isDraggingStarted() && !m_isPrimary) {
|
if (isDraggingStarted() && !m_isPrimary) {
|
||||||
m_sendDragThread = new Thread(
|
m_sendDragThread = new Thread([this](){ send_drag_thread(); });
|
||||||
new TMethodJob<MSWindowsScreen>(
|
|
||||||
this,
|
|
||||||
&MSWindowsScreen::sendDragThread));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void MSWindowsScreen::send_drag_thread()
|
||||||
MSWindowsScreen::sendDragThread(void*)
|
|
||||||
{
|
{
|
||||||
std::string& draggingFilename = getDraggingFilename();
|
std::string& draggingFilename = getDraggingFilename();
|
||||||
size_t size = draggingFilename.size();
|
size_t size = draggingFilename.size();
|
||||||
|
|
|
@ -222,7 +222,7 @@ private: // HACK
|
||||||
KeyModifierMask state, WPARAM wParam) const;
|
KeyModifierMask state, WPARAM wParam) const;
|
||||||
|
|
||||||
// send drag info and data back to server
|
// send drag info and data back to server
|
||||||
void sendDragThread(void*);
|
void send_drag_thread();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct HotKeyItem {
|
struct HotKeyItem {
|
||||||
|
|
|
@ -23,7 +23,6 @@
|
||||||
#include "arch/Arch.h"
|
#include "arch/Arch.h"
|
||||||
#include "arch/win32/ArchMiscWindows.h"
|
#include "arch/win32/ArchMiscWindows.h"
|
||||||
#include "base/Log.h"
|
#include "base/Log.h"
|
||||||
#include "base/TMethodJob.h"
|
|
||||||
|
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#include <tchar.h>
|
#include <tchar.h>
|
||||||
|
@ -223,8 +222,7 @@ MSWindowsScreenSaver::watchDesktop()
|
||||||
// watch desktop in another thread
|
// watch desktop in another thread
|
||||||
LOG((CLOG_DEBUG "watching screen saver desktop"));
|
LOG((CLOG_DEBUG "watching screen saver desktop"));
|
||||||
m_active = true;
|
m_active = true;
|
||||||
m_watch = new Thread(new TMethodJob<MSWindowsScreenSaver>(this,
|
m_watch = new Thread([this](){ watch_desktop_thread(); });
|
||||||
&MSWindowsScreenSaver::watchDesktopThread));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -238,8 +236,7 @@ MSWindowsScreenSaver::watchProcess(HANDLE process)
|
||||||
LOG((CLOG_DEBUG "watching screen saver process"));
|
LOG((CLOG_DEBUG "watching screen saver process"));
|
||||||
m_process = process;
|
m_process = process;
|
||||||
m_active = true;
|
m_active = true;
|
||||||
m_watch = new Thread(new TMethodJob<MSWindowsScreenSaver>(this,
|
m_watch = new Thread([this](){ watch_process_thread(); });
|
||||||
&MSWindowsScreenSaver::watchProcessThread));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -260,8 +257,7 @@ MSWindowsScreenSaver::unwatchProcess()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void MSWindowsScreenSaver::watch_desktop_thread()
|
||||||
MSWindowsScreenSaver::watchDesktopThread(void*)
|
|
||||||
{
|
{
|
||||||
DWORD reserved = 0;
|
DWORD reserved = 0;
|
||||||
TCHAR* name = NULL;
|
TCHAR* name = NULL;
|
||||||
|
@ -283,8 +279,7 @@ MSWindowsScreenSaver::watchDesktopThread(void*)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void MSWindowsScreenSaver::watch_process_thread()
|
||||||
MSWindowsScreenSaver::watchProcessThread(void*)
|
|
||||||
{
|
{
|
||||||
for (;;) {
|
for (;;) {
|
||||||
Thread::testCancel();
|
Thread::testCancel();
|
||||||
|
|
|
@ -64,8 +64,8 @@ private:
|
||||||
void watchDesktop();
|
void watchDesktop();
|
||||||
void watchProcess(HANDLE process);
|
void watchProcess(HANDLE process);
|
||||||
void unwatchProcess();
|
void unwatchProcess();
|
||||||
void watchDesktopThread(void*);
|
void watch_desktop_thread();
|
||||||
void watchProcessThread(void*);
|
void watch_process_thread();
|
||||||
|
|
||||||
void setSecure(bool secure, bool saveSecureAsInt);
|
void setSecure(bool secure, bool saveSecureAsInt);
|
||||||
bool isSecure(bool* wasSecureAnInt) const;
|
bool isSecure(bool* wasSecureAnInt) const;
|
||||||
|
|
|
@ -29,7 +29,6 @@
|
||||||
#include "arch/win32/XArchWindows.h"
|
#include "arch/win32/XArchWindows.h"
|
||||||
#include "arch/Arch.h"
|
#include "arch/Arch.h"
|
||||||
#include "base/log_outputters.h"
|
#include "base/log_outputters.h"
|
||||||
#include "base/TMethodJob.h"
|
|
||||||
#include "base/Log.h"
|
#include "base/Log.h"
|
||||||
#include "common/Version.h"
|
#include "common/Version.h"
|
||||||
|
|
||||||
|
@ -84,11 +83,8 @@ MSWindowsWatchdog::MSWindowsWatchdog(
|
||||||
void
|
void
|
||||||
MSWindowsWatchdog::startAsync()
|
MSWindowsWatchdog::startAsync()
|
||||||
{
|
{
|
||||||
m_thread = new Thread(new TMethodJob<MSWindowsWatchdog>(
|
m_thread = new Thread([this](){ main_loop(); });
|
||||||
this, &MSWindowsWatchdog::mainLoop, nullptr));
|
m_outputThread = new Thread([this](){ output_loop(); });
|
||||||
|
|
||||||
m_outputThread = new Thread(new TMethodJob<MSWindowsWatchdog>(
|
|
||||||
this, &MSWindowsWatchdog::outputLoop, nullptr));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -157,8 +153,7 @@ MSWindowsWatchdog::getUserToken(LPSECURITY_ATTRIBUTES security)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void MSWindowsWatchdog::main_loop()
|
||||||
MSWindowsWatchdog::mainLoop(void*)
|
|
||||||
{
|
{
|
||||||
shutdownExistingProcesses();
|
shutdownExistingProcesses();
|
||||||
|
|
||||||
|
@ -421,8 +416,7 @@ MSWindowsWatchdog::getCommand() const
|
||||||
return cmd;
|
return cmd;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void MSWindowsWatchdog::output_loop()
|
||||||
MSWindowsWatchdog::outputLoop(void*)
|
|
||||||
{
|
{
|
||||||
// +1 char for \0
|
// +1 char for \0
|
||||||
CHAR buffer[kOutputBufferSize + 1];
|
CHAR buffer[kOutputBufferSize + 1];
|
||||||
|
|
|
@ -48,8 +48,8 @@ public:
|
||||||
void setFileLogOutputter(FileLogOutputter* outputter);
|
void setFileLogOutputter(FileLogOutputter* outputter);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void mainLoop(void*);
|
void main_loop();
|
||||||
void outputLoop(void*);
|
void output_loop();
|
||||||
void shutdownProcess(HANDLE handle, DWORD pid, int timeout);
|
void shutdownProcess(HANDLE handle, DWORD pid, int timeout);
|
||||||
void shutdownExistingProcesses();
|
void shutdownExistingProcesses();
|
||||||
HANDLE duplicateProcessToken(HANDLE process, LPSECURITY_ATTRIBUTES security);
|
HANDLE duplicateProcessToken(HANDLE process, LPSECURITY_ATTRIBUTES security);
|
||||||
|
|
|
@ -174,7 +174,7 @@ private:
|
||||||
EventRef theEvent, void* inUserData);
|
EventRef theEvent, void* inUserData);
|
||||||
|
|
||||||
// sleep / wakeup support
|
// sleep / wakeup support
|
||||||
void watchSystemPowerThread(void*);
|
void watchSystemPowerThread();
|
||||||
static void testCanceled(CFRunLoopTimerRef timer, void*info);
|
static void testCanceled(CFRunLoopTimerRef timer, void*info);
|
||||||
static void powerChangeCallback(void* refcon, io_service_t service,
|
static void powerChangeCallback(void* refcon, io_service_t service,
|
||||||
natural_t messageType, void* messageArgument);
|
natural_t messageType, void* messageArgument);
|
||||||
|
@ -201,7 +201,7 @@ private:
|
||||||
// convert CFString to char*
|
// convert CFString to char*
|
||||||
static char* CFStringRefToUTF8String(CFStringRef aString);
|
static char* CFStringRefToUTF8String(CFStringRef aString);
|
||||||
|
|
||||||
void getDropTargetThread(void*);
|
void get_drop_target_thread();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct HotKeyItem {
|
struct HotKeyItem {
|
||||||
|
|
|
@ -38,7 +38,6 @@
|
||||||
#include "base/Log.h"
|
#include "base/Log.h"
|
||||||
#include "base/IEventQueue.h"
|
#include "base/IEventQueue.h"
|
||||||
#include "base/TMethodEventJob.h"
|
#include "base/TMethodEventJob.h"
|
||||||
#include "base/TMethodJob.h"
|
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <mach-o/dyld.h>
|
#include <mach-o/dyld.h>
|
||||||
|
@ -157,8 +156,7 @@ OSXScreen::OSXScreen(IEventQueue* events, bool isPrimary, bool autoShowHideCurso
|
||||||
m_carbonLoopReady = new CondVar<bool>(m_carbonLoopMutex, false);
|
m_carbonLoopReady = new CondVar<bool>(m_carbonLoopMutex, false);
|
||||||
#endif
|
#endif
|
||||||
LOG((CLOG_DEBUG "starting watchSystemPowerThread"));
|
LOG((CLOG_DEBUG "starting watchSystemPowerThread"));
|
||||||
m_pmWatchThread = new Thread(new TMethodJob<OSXScreen>
|
m_pmWatchThread = new Thread([this](){ watchSystemPowerThread(); });
|
||||||
(this, &OSXScreen::watchSystemPowerThread));
|
|
||||||
}
|
}
|
||||||
catch (...) {
|
catch (...) {
|
||||||
m_events->removeHandler(m_events->forOSXScreen().confirmSleep(),
|
m_events->removeHandler(m_events->forOSXScreen().confirmSleep(),
|
||||||
|
@ -578,16 +576,14 @@ OSXScreen::fakeMouseButton(ButtonID id, bool press)
|
||||||
|
|
||||||
if (!press && (id == kButtonLeft)) {
|
if (!press && (id == kButtonLeft)) {
|
||||||
if (m_fakeDraggingStarted) {
|
if (m_fakeDraggingStarted) {
|
||||||
m_getDropTargetThread = new Thread(new TMethodJob<OSXScreen>(
|
m_getDropTargetThread = new Thread([this](){ get_drop_target_thread(); });
|
||||||
this, &OSXScreen::getDropTargetThread));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
m_draggingStarted = false;
|
m_draggingStarted = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void OSXScreen::get_drop_target_thread()
|
||||||
OSXScreen::getDropTargetThread(void*)
|
|
||||||
{
|
{
|
||||||
#if defined(MAC_OS_X_VERSION_10_7)
|
#if defined(MAC_OS_X_VERSION_10_7)
|
||||||
char* cstr = NULL;
|
char* cstr = NULL;
|
||||||
|
@ -1186,8 +1182,7 @@ OSXScreen::onMouseButton(bool pressed, UInt16 macButton)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (m_fakeDraggingStarted) {
|
if (m_fakeDraggingStarted) {
|
||||||
m_getDropTargetThread = new Thread(new TMethodJob<OSXScreen>(
|
m_getDropTargetThread = new Thread([this](){ get_drop_target_thread(); });
|
||||||
this, &OSXScreen::getDropTargetThread));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
m_draggingStarted = false;
|
m_draggingStarted = false;
|
||||||
|
@ -1621,8 +1616,7 @@ OSXScreen::userSwitchCallback(EventHandlerCallRef nextHandler,
|
||||||
// main of thread monitoring system power (sleep/wakeup) using a CFRunLoop
|
// main of thread monitoring system power (sleep/wakeup) using a CFRunLoop
|
||||||
//
|
//
|
||||||
|
|
||||||
void
|
void OSXScreen::watchSystemPowerThread()
|
||||||
OSXScreen::watchSystemPowerThread(void*)
|
|
||||||
{
|
{
|
||||||
io_object_t notifier;
|
io_object_t notifier;
|
||||||
IONotificationPortRef notificationPortRef;
|
IONotificationPortRef notificationPortRef;
|
||||||
|
|
|
@ -39,7 +39,6 @@
|
||||||
#include "net/XSocket.h"
|
#include "net/XSocket.h"
|
||||||
#include "mt/Thread.h"
|
#include "mt/Thread.h"
|
||||||
#include "arch/Arch.h"
|
#include "arch/Arch.h"
|
||||||
#include "base/TMethodJob.h"
|
|
||||||
#include "base/IEventQueue.h"
|
#include "base/IEventQueue.h"
|
||||||
#include "base/Log.h"
|
#include "base/Log.h"
|
||||||
#include "base/TMethodEventJob.h"
|
#include "base/TMethodEventJob.h"
|
||||||
|
@ -1824,10 +1823,8 @@ Server::onMouseMovePrimary(SInt32 x, SInt32 y)
|
||||||
&& m_active != newScreen
|
&& m_active != newScreen
|
||||||
&& m_waitDragInfoThread) {
|
&& m_waitDragInfoThread) {
|
||||||
if (m_sendDragInfoThread == NULL) {
|
if (m_sendDragInfoThread == NULL) {
|
||||||
m_sendDragInfoThread = new Thread(
|
m_sendDragInfoThread = new Thread([this, newScreen]()
|
||||||
new TMethodJob<Server>(
|
{ send_drag_info_thread(newScreen); });
|
||||||
this,
|
|
||||||
&Server::sendDragInfoThread, newScreen));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
@ -1843,11 +1840,8 @@ Server::onMouseMovePrimary(SInt32 x, SInt32 y)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void Server::send_drag_info_thread(BaseClientProxy* newScreen)
|
||||||
Server::sendDragInfoThread(void* arg)
|
|
||||||
{
|
{
|
||||||
BaseClientProxy* newScreen = static_cast<BaseClientProxy*>(arg);
|
|
||||||
|
|
||||||
m_dragFileList.clear();
|
m_dragFileList.clear();
|
||||||
std::string& dragFileList = m_screen->getDraggingFilename();
|
std::string& dragFileList = m_screen->getDraggingFilename();
|
||||||
if (!dragFileList.empty()) {
|
if (!dragFileList.empty()) {
|
||||||
|
@ -2087,14 +2081,11 @@ void
|
||||||
Server::onFileRecieveCompleted()
|
Server::onFileRecieveCompleted()
|
||||||
{
|
{
|
||||||
if (isReceivedFileSizeValid()) {
|
if (isReceivedFileSizeValid()) {
|
||||||
m_writeToDropDirThread = new Thread(
|
m_writeToDropDirThread = new Thread([this]() { write_to_drop_dir_thread(); });
|
||||||
new TMethodJob<Server>(
|
|
||||||
this, &Server::writeToDropDirThread));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void Server::write_to_drop_dir_thread()
|
||||||
Server::writeToDropDirThread(void*)
|
|
||||||
{
|
{
|
||||||
LOG((CLOG_DEBUG "starting write to drop dir thread"));
|
LOG((CLOG_DEBUG "starting write to drop dir thread"));
|
||||||
|
|
||||||
|
@ -2394,17 +2385,12 @@ Server::sendFileToClient(const char* filename)
|
||||||
StreamChunker::interruptFile();
|
StreamChunker::interruptFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
m_sendFileThread = new Thread(
|
m_sendFileThread = new Thread([this, filename]() { send_file_thread(filename); });
|
||||||
new TMethodJob<Server>(
|
|
||||||
this, &Server::sendFileThread,
|
|
||||||
static_cast<void*>(const_cast<char*>(filename))));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void Server::send_file_thread(const char* filename)
|
||||||
Server::sendFileThread(void* data)
|
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
char* filename = static_cast<char*>(data);
|
|
||||||
LOG((CLOG_DEBUG "sending file to client, filename=%s", filename));
|
LOG((CLOG_DEBUG "sending file to client, filename=%s", filename));
|
||||||
StreamChunker::sendFile(filename, m_events, this);
|
StreamChunker::sendFile(filename, m_events, this);
|
||||||
}
|
}
|
||||||
|
|
|
@ -358,13 +358,13 @@ private:
|
||||||
void forceLeaveClient(BaseClientProxy* client);
|
void forceLeaveClient(BaseClientProxy* client);
|
||||||
|
|
||||||
// thread function for sending file
|
// thread function for sending file
|
||||||
void sendFileThread(void*);
|
void send_file_thread(const char* filename);
|
||||||
|
|
||||||
// thread function for writing file to drop directory
|
// thread function for writing file to drop directory
|
||||||
void writeToDropDirThread(void*);
|
void write_to_drop_dir_thread();
|
||||||
|
|
||||||
// thread function for sending drag information
|
// thread function for sending drag information
|
||||||
void sendDragInfoThread(void*);
|
void send_drag_info_thread(BaseClientProxy* newScreen);
|
||||||
|
|
||||||
// send drag info to new client screen
|
// send drag info to new client screen
|
||||||
void sendDragInfo(BaseClientProxy* newScreen);
|
void sendDragInfo(BaseClientProxy* newScreen);
|
||||||
|
|
|
@ -31,7 +31,6 @@
|
||||||
#include "net/SocketMultiplexer.h"
|
#include "net/SocketMultiplexer.h"
|
||||||
#include "mt/Thread.h"
|
#include "mt/Thread.h"
|
||||||
#include "arch/Arch.h"
|
#include "arch/Arch.h"
|
||||||
#include "base/TMethodJob.h"
|
|
||||||
#include "base/String.h"
|
#include "base/String.h"
|
||||||
#include "base/Log.h"
|
#include "base/Log.h"
|
||||||
#include "base/EventQueue.h"
|
#include "base/EventQueue.h"
|
||||||
|
|
|
@ -36,7 +36,6 @@
|
||||||
#include "net/TCPSocketFactory.h"
|
#include "net/TCPSocketFactory.h"
|
||||||
#include "mt/Thread.h"
|
#include "mt/Thread.h"
|
||||||
#include "base/TMethodEventJob.h"
|
#include "base/TMethodEventJob.h"
|
||||||
#include "base/TMethodJob.h"
|
|
||||||
#include "base/Log.h"
|
#include "base/Log.h"
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,6 @@
|
||||||
#include "platform/MSWindowsDesks.h"
|
#include "platform/MSWindowsDesks.h"
|
||||||
#include "platform/MSWindowsScreen.h"
|
#include "platform/MSWindowsScreen.h"
|
||||||
#include "platform/MSWindowsScreenSaver.h"
|
#include "platform/MSWindowsScreenSaver.h"
|
||||||
#include "base/TMethodJob.h"
|
|
||||||
|
|
||||||
#include "test/global/gtest.h"
|
#include "test/global/gtest.h"
|
||||||
#include "test/global/gmock.h"
|
#include "test/global/gmock.h"
|
||||||
|
|
Loading…
Reference in New Issue