lib: Pass jobs to barrier::Thread as std::function

This commit is contained in:
Povilas Kanapickas 2021-11-01 06:16:33 +02:00
parent 53356697d9
commit d2c106db53
37 changed files with 68 additions and 306 deletions

View File

@ -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();

View File

@ -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;

View File

@ -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*>(

View File

@ -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 {

View File

@ -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*>(

View File

@ -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");

View 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,

View File

@ -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"

View File

@ -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);
}
}

View File

@ -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;
};

View File

@ -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);
}
}

View File

@ -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"

View File

@ -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()));

View File

@ -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();

View File

@ -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;

View File

@ -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();

View File

@ -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;
} }

View File

@ -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;

View File

@ -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;

View File

@ -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

View File

@ -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;

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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();

View File

@ -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 {

View File

@ -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();

View File

@ -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;

View File

@ -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];

View File

@ -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);

View File

@ -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 {

View File

@ -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;

View File

@ -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);
} }

View File

@ -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);

View File

@ -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"

View File

@ -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>

View File

@ -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"