version 4.5.0
PIThread::stopAndWait now returns bool PIKbdListener on Linux now use piwaitevent_p and can immediately stop new base method piZeroMemory, also migrate all "memset 0" to piZeroMemory
This commit is contained in:
@@ -2,8 +2,8 @@ cmake_minimum_required(VERSION 3.0)
|
|||||||
cmake_policy(SET CMP0017 NEW) # need include() with .cmake
|
cmake_policy(SET CMP0017 NEW) # need include() with .cmake
|
||||||
project(PIP)
|
project(PIP)
|
||||||
set(PIP_MAJOR 4)
|
set(PIP_MAJOR 4)
|
||||||
set(PIP_MINOR 4)
|
set(PIP_MINOR 5)
|
||||||
set(PIP_REVISION 1)
|
set(PIP_REVISION 0)
|
||||||
set(PIP_SUFFIX )
|
set(PIP_SUFFIX )
|
||||||
set(PIP_COMPANY SHS)
|
set(PIP_COMPANY SHS)
|
||||||
set(PIP_DOMAIN org.SHS)
|
set(PIP_DOMAIN org.SHS)
|
||||||
|
|||||||
@@ -793,7 +793,7 @@ bool PITerminal::initialize() {
|
|||||||
// SetHandleInformation(PRIVATE->pipe_in[1], HANDLE_FLAG_INHERIT, 0);
|
// SetHandleInformation(PRIVATE->pipe_in[1], HANDLE_FLAG_INHERIT, 0);
|
||||||
// SetHandleInformation(PRIVATE->hConBuf, HANDLE_FLAG_INHERIT, 0);
|
// SetHandleInformation(PRIVATE->hConBuf, HANDLE_FLAG_INHERIT, 0);
|
||||||
// GetStartupInfoA(&PRIVATE->si);
|
// GetStartupInfoA(&PRIVATE->si);
|
||||||
memset(&PRIVATE->si, 0, sizeof(PRIVATE->si));
|
piZeroMemory(PRIVATE->si);
|
||||||
PRIVATE->si.cb = sizeof(STARTUPINFO);
|
PRIVATE->si.cb = sizeof(STARTUPINFO);
|
||||||
// PRIVATE->si.dwFlags |= STARTF_USESTDHANDLES;
|
// PRIVATE->si.dwFlags |= STARTF_USESTDHANDLES;
|
||||||
PRIVATE->si.dwFlags |= STARTF_USESHOWWINDOW;
|
PRIVATE->si.dwFlags |= STARTF_USESHOWWINDOW;
|
||||||
@@ -805,7 +805,7 @@ bool PITerminal::initialize() {
|
|||||||
PRIVATE->si.dwXCountChars = 80;
|
PRIVATE->si.dwXCountChars = 80;
|
||||||
PRIVATE->si.dwYCountChars = 24;
|
PRIVATE->si.dwYCountChars = 24;
|
||||||
|
|
||||||
memset(&PRIVATE->pi, 0, sizeof(PRIVATE->pi));
|
piZeroMemory(PRIVATE->pi);
|
||||||
|
|
||||||
PIString shmh = PIString::fromNumber(randomi() % 10000);
|
PIString shmh = PIString::fromNumber(randomi() % 10000);
|
||||||
PIString pname = "\\\\.\\pipe\\piterm" + shmh;
|
PIString pname = "\\\\.\\pipe\\piterm" + shmh;
|
||||||
@@ -857,7 +857,7 @@ bool PITerminal::initialize() {
|
|||||||
# else
|
# else
|
||||||
# ifdef HAS_FORKPTY
|
# ifdef HAS_FORKPTY
|
||||||
char pty[256];
|
char pty[256];
|
||||||
memset(pty, 0, 256);
|
piZeroMemory(pty, 256);
|
||||||
winsize ws;
|
winsize ws;
|
||||||
ws.ws_col = dsize_x;
|
ws.ws_col = dsize_x;
|
||||||
ws.ws_row = dsize_y;
|
ws.ws_row = dsize_y;
|
||||||
|
|||||||
@@ -143,7 +143,7 @@ void log_callback(void * cls, const char * fmt, va_list ap) {
|
|||||||
piCout << "log" << server;
|
piCout << "log" << server;
|
||||||
if (!server) return;
|
if (!server) return;
|
||||||
char buffer[1_KiB];
|
char buffer[1_KiB];
|
||||||
memset(buffer, 0, 1_KiB);
|
piZeroMemory(buffer, 1_KiB);
|
||||||
std::vsnprintf(buffer, 1_KiB, fmt, ap);
|
std::vsnprintf(buffer, 1_KiB, fmt, ap);
|
||||||
piCout << buffer;
|
piCout << buffer;
|
||||||
}
|
}
|
||||||
@@ -312,7 +312,7 @@ bool MicrohttpdServer::listen(PINetworkAddress addr) {
|
|||||||
key_pass = opts.value(Option::HTTPSKeyPassword).toByteArray();
|
key_pass = opts.value(Option::HTTPSKeyPassword).toByteArray();
|
||||||
if (key_pass.isNotEmpty()) key_pass.append(0);
|
if (key_pass.isNotEmpty()) key_pass.append(0);
|
||||||
sockaddr_in sa_addr;
|
sockaddr_in sa_addr;
|
||||||
memset(&sa_addr, 0, sizeof(sa_addr));
|
piZeroMemory(sa_addr);
|
||||||
sa_addr.sin_port = htons(addr.port());
|
sa_addr.sin_port = htons(addr.port());
|
||||||
sa_addr.sin_addr.s_addr = addr.ip();
|
sa_addr.sin_addr.s_addr = addr.ip();
|
||||||
sa_addr.sin_family = AF_INET;
|
sa_addr.sin_family = AF_INET;
|
||||||
|
|||||||
@@ -405,7 +405,7 @@ float PISystemMonitor::calcThreadUsage(PISystemTime & t_new, PISystemTime & t_ol
|
|||||||
ullong PISystemMonitor::totalRAM() {
|
ullong PISystemMonitor::totalRAM() {
|
||||||
#ifdef ESP_PLATFORM
|
#ifdef ESP_PLATFORM
|
||||||
multi_heap_info_t heap_info;
|
multi_heap_info_t heap_info;
|
||||||
memset(&heap_info, 0, sizeof(multi_heap_info_t));
|
piZeroMemory(heap_info);
|
||||||
heap_caps_get_info(&heap_info, MALLOC_CAP_8BIT);
|
heap_caps_get_info(&heap_info, MALLOC_CAP_8BIT);
|
||||||
return heap_info.total_allocated_bytes + heap_info.total_free_bytes;
|
return heap_info.total_allocated_bytes + heap_info.total_free_bytes;
|
||||||
#endif
|
#endif
|
||||||
@@ -416,7 +416,7 @@ ullong PISystemMonitor::totalRAM() {
|
|||||||
ullong PISystemMonitor::freeRAM() {
|
ullong PISystemMonitor::freeRAM() {
|
||||||
#ifdef ESP_PLATFORM
|
#ifdef ESP_PLATFORM
|
||||||
multi_heap_info_t heap_info;
|
multi_heap_info_t heap_info;
|
||||||
memset(&heap_info, 0, sizeof(multi_heap_info_t));
|
piZeroMemory(heap_info);
|
||||||
heap_caps_get_info(&heap_info, MALLOC_CAP_8BIT);
|
heap_caps_get_info(&heap_info, MALLOC_CAP_8BIT);
|
||||||
return heap_info.total_free_bytes;
|
return heap_info.total_free_bytes;
|
||||||
#endif
|
#endif
|
||||||
@@ -427,7 +427,7 @@ ullong PISystemMonitor::freeRAM() {
|
|||||||
ullong PISystemMonitor::usedRAM() {
|
ullong PISystemMonitor::usedRAM() {
|
||||||
#ifdef ESP_PLATFORM
|
#ifdef ESP_PLATFORM
|
||||||
multi_heap_info_t heap_info;
|
multi_heap_info_t heap_info;
|
||||||
memset(&heap_info, 0, sizeof(multi_heap_info_t));
|
piZeroMemory(heap_info);
|
||||||
heap_caps_get_info(&heap_info, MALLOC_CAP_8BIT);
|
heap_caps_get_info(&heap_info, MALLOC_CAP_8BIT);
|
||||||
return heap_info.total_allocated_bytes;
|
return heap_info.total_allocated_bytes;
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
|
|
||||||
#include "piincludes_p.h"
|
#include "piincludes_p.h"
|
||||||
#include "piliterals.h"
|
#include "piliterals.h"
|
||||||
|
#include "piwaitevent_p.h"
|
||||||
#ifndef WINDOWS
|
#ifndef WINDOWS
|
||||||
# include <termios.h>
|
# include <termios.h>
|
||||||
#else
|
#else
|
||||||
@@ -144,6 +145,7 @@ PRIVATE_DEFINITION_START(PIKbdListener)
|
|||||||
int
|
int
|
||||||
#endif
|
#endif
|
||||||
ret;
|
ret;
|
||||||
|
PIWaitEvent event;
|
||||||
PRIVATE_DEFINITION_END(PIKbdListener)
|
PRIVATE_DEFINITION_END(PIKbdListener)
|
||||||
|
|
||||||
|
|
||||||
@@ -157,11 +159,11 @@ PIKbdListener::PIKbdListener(KBFunc slot, void * _d, bool startNow): PIThread()
|
|||||||
#else
|
#else
|
||||||
tcgetattr(0, &PRIVATE->sterm);
|
tcgetattr(0, &PRIVATE->sterm);
|
||||||
#endif
|
#endif
|
||||||
is_active = true;
|
|
||||||
ret_func = slot;
|
ret_func = slot;
|
||||||
kbddata_ = _d;
|
kbddata_ = _d;
|
||||||
dbl_interval = 400;
|
dbl_interval = 400;
|
||||||
PIKbdListener::exiting = exit_enabled = false;
|
PRIVATE->event.create();
|
||||||
|
PIKbdListener::exiting = false;
|
||||||
if (startNow) start();
|
if (startNow) start();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -169,7 +171,7 @@ PIKbdListener::PIKbdListener(KBFunc slot, void * _d, bool startNow): PIThread()
|
|||||||
PIKbdListener::~PIKbdListener() {
|
PIKbdListener::~PIKbdListener() {
|
||||||
stop();
|
stop();
|
||||||
if (!waitForFinish(100_ms)) terminate();
|
if (!waitForFinish(100_ms)) terminate();
|
||||||
end();
|
PRIVATE->event.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -216,7 +218,8 @@ PIKbdListener::MouseButtons getButtons(DWORD v) {
|
|||||||
void PIKbdListener::readKeyboard() {
|
void PIKbdListener::readKeyboard() {
|
||||||
ke.key = 0;
|
ke.key = 0;
|
||||||
ke.modifiers = 0;
|
ke.modifiers = 0;
|
||||||
memset(rc, 0, 8);
|
char rc[8];
|
||||||
|
piZeroMemory(rc, 8);
|
||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
INPUT_RECORD ir;
|
INPUT_RECORD ir;
|
||||||
ReadConsoleInput(PRIVATE->hIn, &ir, 1, &(PRIVATE->ret));
|
ReadConsoleInput(PRIVATE->hIn, &ir, 1, &(PRIVATE->ret));
|
||||||
@@ -403,6 +406,7 @@ void PIKbdListener::readKeyboard() {
|
|||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
tcsetattr(0, TCSANOW, &PRIVATE->tterm);
|
tcsetattr(0, TCSANOW, &PRIVATE->tterm);
|
||||||
|
if (!PRIVATE->event.wait(0)) return;
|
||||||
PRIVATE->ret = read(0, rc, 8);
|
PRIVATE->ret = read(0, rc, 8);
|
||||||
/*piCout << "key" << PIString(rc).replaceAll("\e", "\\e");
|
/*piCout << "key" << PIString(rc).replaceAll("\e", "\\e");
|
||||||
for (int i = 0; i < PRIVATE->ret; ++i)
|
for (int i = 0; i < PRIVATE->ret; ++i)
|
||||||
@@ -542,6 +546,13 @@ void PIKbdListener::readKeyboard() {
|
|||||||
|
|
||||||
void PIKbdListener::stop() {
|
void PIKbdListener::stop() {
|
||||||
PIThread::stop();
|
PIThread::stop();
|
||||||
|
PRIVATE->event.interrupt();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool PIKbdListener::stopAndWait(PISystemTime timeout) {
|
||||||
|
stop();
|
||||||
|
return waitForFinish(timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -33,11 +33,7 @@
|
|||||||
while (!PIKbdListener::exiting) \
|
while (!PIKbdListener::exiting) \
|
||||||
piMSleep(PIP_MIN_MSLEEP * 5); \
|
piMSleep(PIP_MIN_MSLEEP * 5); \
|
||||||
if (PIKbdListener::instance()) { \
|
if (PIKbdListener::instance()) { \
|
||||||
PIKbdListener::instance()->stop(); \
|
if (!PIKbdListener::instance()->stopAndWait(PISystemTime::fromSeconds(1))) PIKbdListener::instance()->terminate(); \
|
||||||
if (!PIKbdListener::instance()->waitForFinish(PISystemTime::fromMilliseconds(100))) { \
|
|
||||||
PIKbdListener::instance()->setDebug(false); \
|
|
||||||
PIKbdListener::instance()->terminate(); \
|
|
||||||
} \
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -188,6 +184,8 @@ public:
|
|||||||
|
|
||||||
void stop();
|
void stop();
|
||||||
|
|
||||||
|
bool stopAndWait(PISystemTime timeout = {});
|
||||||
|
|
||||||
//! Returns if keyboard listening is active (not running!)
|
//! Returns if keyboard listening is active (not running!)
|
||||||
bool isActive() { return is_active; }
|
bool isActive() { return is_active; }
|
||||||
|
|
||||||
@@ -258,9 +256,8 @@ private:
|
|||||||
PRIVATE_DECLARATION(PIP_EXPORT)
|
PRIVATE_DECLARATION(PIP_EXPORT)
|
||||||
KBFunc ret_func;
|
KBFunc ret_func;
|
||||||
int exit_key;
|
int exit_key;
|
||||||
bool exit_enabled, is_active;
|
bool exit_enabled = false, is_active = true;
|
||||||
void * kbddata_;
|
void * kbddata_;
|
||||||
char rc[8];
|
|
||||||
double dbl_interval;
|
double dbl_interval;
|
||||||
PITimeMeasurer tm_dbl;
|
PITimeMeasurer tm_dbl;
|
||||||
KeyEvent ke;
|
KeyEvent ke;
|
||||||
|
|||||||
@@ -558,6 +558,23 @@ inline uint piHash(const ldouble & v) {
|
|||||||
return piHashData((const uchar *)&v, sizeof(v));
|
return piHashData((const uchar *)&v, sizeof(v));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//! \~\brief
|
||||||
|
//! \~english Zero "size" bytes by address "ptr".
|
||||||
|
//! \~russian Зануляет "size" байт по адресу "ptr".
|
||||||
|
inline void piZeroMemory(void * ptr, size_t size) {
|
||||||
|
memset(ptr, 0, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
//! \~\brief
|
||||||
|
//! \~english Zero variable "v" memory.
|
||||||
|
//! \~russian Зануляет память переменной "v".
|
||||||
|
template<typename T>
|
||||||
|
inline void piZeroMemory(T & v) {
|
||||||
|
piZeroMemory(&v, sizeof(v));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//! \~\brief
|
//! \~\brief
|
||||||
//! \~english Call \b delete on each "container" element.
|
//! \~english Call \b delete on each "container" element.
|
||||||
//! \~russian Вызывает \b delete на каждый элемент "container".
|
//! \~russian Вызывает \b delete на каждый элемент "container".
|
||||||
|
|||||||
@@ -167,7 +167,7 @@ PIInit::PIInit() {
|
|||||||
for (l = 0; l < MAX_PATH; ++l)
|
for (l = 0; l < MAX_PATH; ++l)
|
||||||
if (cpinfo.CodePageName[l] == '\0' || cpinfo.CodePageName[l] == ' ') break;
|
if (cpinfo.CodePageName[l] == '\0' || cpinfo.CodePageName[l] == ' ') break;
|
||||||
__sysoemname__ = new char[256];
|
__sysoemname__ = new char[256];
|
||||||
memset(__sysoemname__, 0, 256);
|
piZeroMemory(__sysoemname__, 256);
|
||||||
memcpy(__sysoemname__, "ibm-", 4);
|
memcpy(__sysoemname__, "ibm-", 4);
|
||||||
memcpy(&(__sysoemname__[4]), cpinfo.CodePageName, l);
|
memcpy(&(__sysoemname__[4]), cpinfo.CodePageName, l);
|
||||||
# else
|
# else
|
||||||
@@ -190,7 +190,7 @@ PIInit::PIInit() {
|
|||||||
host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &__pi_mac_clock);
|
host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &__pi_mac_clock);
|
||||||
# endif
|
# endif
|
||||||
char cbuff[1024];
|
char cbuff[1024];
|
||||||
memset(cbuff, 0, 1024);
|
piZeroMemory(cbuff, 1024);
|
||||||
if (gethostname(cbuff, 1023) == 0) {
|
if (gethostname(cbuff, 1023) == 0) {
|
||||||
sinfo->hostname = cbuff;
|
sinfo->hostname = cbuff;
|
||||||
}
|
}
|
||||||
@@ -210,7 +210,7 @@ PIInit::PIInit() {
|
|||||||
wchar_t ** argv_ = CommandLineToArgvW(GetCommandLineW(), &argc_);
|
wchar_t ** argv_ = CommandLineToArgvW(GetCommandLineW(), &argc_);
|
||||||
if (argc_ > 0 && argv_ != 0) sinfo->execCommand = argv_[0];
|
if (argc_ > 0 && argv_ != 0) sinfo->execCommand = argv_[0];
|
||||||
LocalFree(argv_);
|
LocalFree(argv_);
|
||||||
memset(cbuff, 0, 1024);
|
piZeroMemory(cbuff, 1024);
|
||||||
ulong unlen = 1023;
|
ulong unlen = 1023;
|
||||||
if (GetUserNameA(cbuff, &unlen) != 0) sinfo->user = cbuff;
|
if (GetUserNameA(cbuff, &unlen) != 0) sinfo->user = cbuff;
|
||||||
# else // WINDOWS
|
# else // WINDOWS
|
||||||
@@ -219,7 +219,7 @@ PIInit::PIInit() {
|
|||||||
if (ps)
|
if (ps)
|
||||||
sinfo->user = ps->pw_name;
|
sinfo->user = ps->pw_name;
|
||||||
else {
|
else {
|
||||||
memset(cbuff, 0, 1024);
|
piZeroMemory(cbuff, 1024);
|
||||||
char * l = getlogin();
|
char * l = getlogin();
|
||||||
if (l) sinfo->user = l;
|
if (l) sinfo->user = l;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ void PIWaitEvent::create() {
|
|||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
for (int i = 0; i < 3; ++i)
|
for (int i = 0; i < 3; ++i)
|
||||||
memset(&(fds[i]), 0, sizeof(fds[i]));
|
piZeroMemory(fds[i]);
|
||||||
if (::pipe(pipe_fd) < 0) {
|
if (::pipe(pipe_fd) < 0) {
|
||||||
piCout << "Error with pipe:" << errorString();
|
piCout << "Error with pipe:" << errorString();
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -326,7 +326,7 @@ PIVector<PIFile::FileInfo> PIDir::entries() {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
WIN32_FIND_DATAA fd;
|
WIN32_FIND_DATAA fd;
|
||||||
memset(&fd, 0, sizeof(fd));
|
piZeroMemory(fd);
|
||||||
p += "\\*";
|
p += "\\*";
|
||||||
void * hf = FindFirstFileA((LPCSTR)(p.data()), &fd);
|
void * hf = FindFirstFileA((LPCSTR)(p.data()), &fd);
|
||||||
if (!hf) return l;
|
if (!hf) return l;
|
||||||
@@ -335,7 +335,7 @@ PIVector<PIFile::FileInfo> PIDir::entries() {
|
|||||||
PIString fn(fd.cFileName);
|
PIString fn(fd.cFileName);
|
||||||
if (fn == "..") hdd = true;
|
if (fn == "..") hdd = true;
|
||||||
l << PIFile::fileInfo(dp + fn);
|
l << PIFile::fileInfo(dp + fn);
|
||||||
memset(&fd, 0, sizeof(fd));
|
piZeroMemory(fd);
|
||||||
} while (FindNextFileA(hf, &fd) != 0);
|
} while (FindNextFileA(hf, &fd) != 0);
|
||||||
FindClose(hf);
|
FindClose(hf);
|
||||||
l.sort(sort_compare);
|
l.sort(sort_compare);
|
||||||
@@ -440,7 +440,7 @@ PIDir PIDir::current() {
|
|||||||
char rc[1024];
|
char rc[1024];
|
||||||
#endif
|
#endif
|
||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
memset(rc, 0, 1024);
|
piZeroMemory(rc, 1024);
|
||||||
if (GetCurrentDirectory(1024, (LPTSTR)rc) == 0) return PIString();
|
if (GetCurrentDirectory(1024, (LPTSTR)rc) == 0) return PIString();
|
||||||
PIString ret(rc);
|
PIString ret(rc);
|
||||||
ret.replaceAll("\\", PIDir::separator);
|
ret.replaceAll("\\", PIDir::separator);
|
||||||
@@ -463,13 +463,13 @@ PIDir PIDir::home() {
|
|||||||
#endif
|
#endif
|
||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
rc = new char[1024];
|
rc = new char[1024];
|
||||||
memset(rc, 0, 1024);
|
piZeroMemory(rc, 1024);
|
||||||
if (ExpandEnvironmentStrings((LPCTSTR) "%HOMEPATH%", (LPTSTR)rc, 1024) == 0) {
|
if (ExpandEnvironmentStrings((LPCTSTR) "%HOMEPATH%", (LPTSTR)rc, 1024) == 0) {
|
||||||
delete[] rc;
|
delete[] rc;
|
||||||
return PIDir();
|
return PIDir();
|
||||||
}
|
}
|
||||||
PIString hp(rc);
|
PIString hp(rc);
|
||||||
memset(rc, 0, 1024);
|
piZeroMemory(rc, 1024);
|
||||||
if (ExpandEnvironmentStrings((LPCTSTR) "%HOMEDRIVE%", (LPTSTR)rc, 1024) == 0) {
|
if (ExpandEnvironmentStrings((LPCTSTR) "%HOMEDRIVE%", (LPTSTR)rc, 1024) == 0) {
|
||||||
delete[] rc;
|
delete[] rc;
|
||||||
return PIDir();
|
return PIDir();
|
||||||
@@ -495,7 +495,7 @@ PIDir PIDir::temporary() {
|
|||||||
char * rc = nullptr;
|
char * rc = nullptr;
|
||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
rc = new char[1024];
|
rc = new char[1024];
|
||||||
memset(rc, 0, 1024);
|
piZeroMemory(rc, 1024);
|
||||||
int ret = GetTempPath(1024, (LPTSTR)rc);
|
int ret = GetTempPath(1024, (LPTSTR)rc);
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
delete[] rc;
|
delete[] rc;
|
||||||
|
|||||||
@@ -272,7 +272,7 @@ bool PIEthernet::openDevice() {
|
|||||||
// if (type() == TCP_Client)
|
// if (type() == TCP_Client)
|
||||||
// connecting_ = true;
|
// connecting_ = true;
|
||||||
if (type() != UDP || mode() == PIIODevice::WriteOnly) return true;
|
if (type() != UDP || mode() == PIIODevice::WriteOnly) return true;
|
||||||
memset(&PRIVATE->addr_, 0, sizeof(PRIVATE->addr_));
|
piZeroMemory(PRIVATE->addr_);
|
||||||
PRIVATE->addr_.sin_family = AF_INET;
|
PRIVATE->addr_.sin_family = AF_INET;
|
||||||
PRIVATE->addr_.sin_port = htons(addr_r.port());
|
PRIVATE->addr_.sin_port = htons(addr_r.port());
|
||||||
if (params[PIEthernet::Broadcast])
|
if (params[PIEthernet::Broadcast])
|
||||||
@@ -377,7 +377,7 @@ bool PIEthernet::joinMulticastGroup(const PIString & group) {
|
|||||||
#else
|
#else
|
||||||
struct ip_mreq mreq;
|
struct ip_mreq mreq;
|
||||||
#endif
|
#endif
|
||||||
memset(&mreq, 0, sizeof(mreq));
|
piZeroMemory(mreq);
|
||||||
#ifdef LINUX
|
#ifdef LINUX
|
||||||
// mreq.imr_address.s_addr = INADDR_ANY;
|
// mreq.imr_address.s_addr = INADDR_ANY;
|
||||||
/*PIEthernet::InterfaceList il = interfaces();
|
/*PIEthernet::InterfaceList il = interfaces();
|
||||||
@@ -423,7 +423,7 @@ bool PIEthernet::leaveMulticastGroup(const PIString & group) {
|
|||||||
#else
|
#else
|
||||||
struct ip_mreq mreq;
|
struct ip_mreq mreq;
|
||||||
#endif
|
#endif
|
||||||
memset(&mreq, 0, sizeof(mreq));
|
piZeroMemory(mreq);
|
||||||
if (params[PIEthernet::Broadcast])
|
if (params[PIEthernet::Broadcast])
|
||||||
#ifndef LWIP
|
#ifndef LWIP
|
||||||
mreq.imr_address.s_addr = INADDR_ANY;
|
mreq.imr_address.s_addr = INADDR_ANY;
|
||||||
@@ -454,7 +454,7 @@ bool PIEthernet::connect(bool threaded) {
|
|||||||
if (connected_) return false;
|
if (connected_) return false;
|
||||||
if (sock == -1) init();
|
if (sock == -1) init();
|
||||||
if (sock == -1) return false;
|
if (sock == -1) return false;
|
||||||
memset(&PRIVATE->addr_, 0, sizeof(PRIVATE->addr_));
|
piZeroMemory(PRIVATE->addr_);
|
||||||
addr_r.set(path());
|
addr_r.set(path());
|
||||||
PRIVATE->addr_.sin_port = htons(addr_r.port());
|
PRIVATE->addr_.sin_port = htons(addr_r.port());
|
||||||
PRIVATE->addr_.sin_addr.s_addr = addr_r.ip();
|
PRIVATE->addr_.sin_addr.s_addr = addr_r.ip();
|
||||||
@@ -492,7 +492,7 @@ bool PIEthernet::listen(bool threaded) {
|
|||||||
}
|
}
|
||||||
listen_threaded = server_bounded = false;
|
listen_threaded = server_bounded = false;
|
||||||
addr_r.set(path());
|
addr_r.set(path());
|
||||||
memset(&PRIVATE->addr_, 0, sizeof(PRIVATE->addr_));
|
piZeroMemory(PRIVATE->addr_);
|
||||||
PRIVATE->addr_.sin_port = htons(addr_r.port());
|
PRIVATE->addr_.sin_port = htons(addr_r.port());
|
||||||
PRIVATE->addr_.sin_addr.s_addr = addr_r.ip();
|
PRIVATE->addr_.sin_addr.s_addr = addr_r.ip();
|
||||||
PRIVATE->addr_.sin_family = AF_INET;
|
PRIVATE->addr_.sin_family = AF_INET;
|
||||||
@@ -618,7 +618,7 @@ ssize_t PIEthernet::readDevice(void * read_to, ssize_t max_size) {
|
|||||||
case TCP_Client:
|
case TCP_Client:
|
||||||
if (connecting_) {
|
if (connecting_) {
|
||||||
addr_r.set(path());
|
addr_r.set(path());
|
||||||
memset(&PRIVATE->addr_, 0, sizeof(PRIVATE->addr_));
|
piZeroMemory(PRIVATE->addr_);
|
||||||
PRIVATE->addr_.sin_port = htons(addr_r.port());
|
PRIVATE->addr_.sin_port = htons(addr_r.port());
|
||||||
PRIVATE->addr_.sin_addr.s_addr = addr_r.ip();
|
PRIVATE->addr_.sin_addr.s_addr = addr_r.ip();
|
||||||
PRIVATE->addr_.sin_family = AF_INET;
|
PRIVATE->addr_.sin_family = AF_INET;
|
||||||
@@ -704,7 +704,7 @@ ssize_t PIEthernet::readDevice(void * read_to, ssize_t max_size) {
|
|||||||
if (rs > 0) received(read_to, rs);
|
if (rs > 0) received(read_to, rs);
|
||||||
return rs;
|
return rs;
|
||||||
case UDP: {
|
case UDP: {
|
||||||
memset(&PRIVATE->raddr_, 0, sizeof(PRIVATE->raddr_));
|
piZeroMemory(PRIVATE->raddr_);
|
||||||
// piCoutObj << "read from" << path() << "...";
|
// piCoutObj << "read from" << path() << "...";
|
||||||
#ifdef WINDOWS
|
#ifdef WINDOWS
|
||||||
long wr = waitForEvent(PRIVATE->event, FD_READ | FD_CLOSE);
|
long wr = waitForEvent(PRIVATE->event, FD_READ | FD_CLOSE);
|
||||||
@@ -765,7 +765,7 @@ ssize_t PIEthernet::writeDevice(const void * data, ssize_t max_size) {
|
|||||||
// piCout << "[PIEth] write to" << ip_s << ":" << port_s << "ok";
|
// piCout << "[PIEth] write to" << ip_s << ":" << port_s << "ok";
|
||||||
case TCP_Client: {
|
case TCP_Client: {
|
||||||
if (connecting_) {
|
if (connecting_) {
|
||||||
memset(&PRIVATE->addr_, 0, sizeof(PRIVATE->addr_));
|
piZeroMemory(PRIVATE->addr_);
|
||||||
addr_r.set(path());
|
addr_r.set(path());
|
||||||
PRIVATE->addr_.sin_port = htons(addr_r.port());
|
PRIVATE->addr_.sin_port = htons(addr_r.port());
|
||||||
PRIVATE->addr_.sin_addr.s_addr = addr_r.ip();
|
PRIVATE->addr_.sin_addr.s_addr = addr_r.ip();
|
||||||
@@ -962,7 +962,7 @@ long PIEthernet::waitForEvent(PIWaitEvent & event, long mask) {
|
|||||||
// DWORD wr = WSAWaitForMultipleEvents(1, &(PRIVATE->read_event), FALSE, WSA_INFINITE, TRUE);
|
// DWORD wr = WSAWaitForMultipleEvents(1, &(PRIVATE->read_event), FALSE, WSA_INFINITE, TRUE);
|
||||||
// if (wr == WSA_WAIT_EVENT_0) {
|
// if (wr == WSA_WAIT_EVENT_0) {
|
||||||
WSANETWORKEVENTS events;
|
WSANETWORKEVENTS events;
|
||||||
memset(&events, 0, sizeof(events));
|
piZeroMemory(events);
|
||||||
WSAEnumNetworkEvents(sock, event.getEvent(), &events);
|
WSAEnumNetworkEvents(sock, event.getEvent(), &events);
|
||||||
// piCoutObj << "wait result" << events.lNetworkEvents;
|
// piCoutObj << "wait result" << events.lNetworkEvents;
|
||||||
return events.lNetworkEvents;
|
return events.lNetworkEvents;
|
||||||
@@ -1245,7 +1245,7 @@ PINetworkAddress PIEthernet::interfaceAddress(const PIString & interface_) {
|
|||||||
return PINetworkAddress();
|
return PINetworkAddress();
|
||||||
#else
|
#else
|
||||||
struct ifreq ifr;
|
struct ifreq ifr;
|
||||||
memset(&ifr, 0, sizeof(ifr));
|
piZeroMemory(ifr);
|
||||||
strcpy(ifr.ifr_name, interface_.dataAscii());
|
strcpy(ifr.ifr_name, interface_.dataAscii());
|
||||||
int s = ::socket(AF_INET, SOCK_DGRAM, 0);
|
int s = ::socket(AF_INET, SOCK_DGRAM, 0);
|
||||||
ioctl(s, SIOCGIFADDR, &ifr);
|
ioctl(s, SIOCGIFADDR, &ifr);
|
||||||
|
|||||||
@@ -492,7 +492,7 @@ PIFile::FileInfo PIFile::fileInfo(const PIString & path) {
|
|||||||
}
|
}
|
||||||
if (!hFile) return ret;
|
if (!hFile) return ret;
|
||||||
BY_HANDLE_FILE_INFORMATION fi;
|
BY_HANDLE_FILE_INFORMATION fi;
|
||||||
memset(&fi, 0, sizeof(fi));
|
piZeroMemory(fi);
|
||||||
if (GetFileInformationByHandle(hFile, &fi) != 0) {
|
if (GetFileInformationByHandle(hFile, &fi) != 0) {
|
||||||
LARGE_INTEGER filesize;
|
LARGE_INTEGER filesize;
|
||||||
filesize.LowPart = filesize.HighPart = 0;
|
filesize.LowPart = filesize.HighPart = 0;
|
||||||
@@ -515,7 +515,7 @@ PIFile::FileInfo PIFile::fileInfo(const PIString & path) {
|
|||||||
CloseHandle(hFile);
|
CloseHandle(hFile);
|
||||||
#else
|
#else
|
||||||
_stat_struct_ fs;
|
_stat_struct_ fs;
|
||||||
memset(&fs, 0, sizeof(fs));
|
piZeroMemory(fs);
|
||||||
_stat_call_(path.data(), &fs);
|
_stat_call_(path.data(), &fs);
|
||||||
int mode = fs.st_mode;
|
int mode = fs.st_mode;
|
||||||
ret.size = fs.st_size;
|
ret.size = fs.st_size;
|
||||||
@@ -544,7 +544,7 @@ PIFile::FileInfo PIFile::fileInfo(const PIString & path) {
|
|||||||
ret.perm_user = FileInfo::Permissions((mode & S_IRUSR) == S_IRUSR, (mode & S_IWUSR) == S_IWUSR, (mode & S_IXUSR) == S_IXUSR);
|
ret.perm_user = FileInfo::Permissions((mode & S_IRUSR) == S_IRUSR, (mode & S_IWUSR) == S_IWUSR, (mode & S_IXUSR) == S_IXUSR);
|
||||||
ret.perm_group = FileInfo::Permissions((mode & S_IRGRP) == S_IRGRP, (mode & S_IWGRP) == S_IWGRP, (mode & S_IXGRP) == S_IXGRP);
|
ret.perm_group = FileInfo::Permissions((mode & S_IRGRP) == S_IRGRP, (mode & S_IWGRP) == S_IWGRP, (mode & S_IXGRP) == S_IXGRP);
|
||||||
ret.perm_other = FileInfo::Permissions((mode & S_IROTH) == S_IROTH, (mode & S_IWOTH) == S_IWOTH, (mode & S_IXOTH) == S_IXOTH);
|
ret.perm_other = FileInfo::Permissions((mode & S_IROTH) == S_IROTH, (mode & S_IWOTH) == S_IWOTH, (mode & S_IXOTH) == S_IXOTH);
|
||||||
memset(&fs, 0, sizeof(fs));
|
piZeroMemory(fs);
|
||||||
_stat_link_(path.data(), &fs);
|
_stat_link_(path.data(), &fs);
|
||||||
mode &= ~S_IFLNK;
|
mode &= ~S_IFLNK;
|
||||||
mode |= S_IFLNK & fs.st_mode;
|
mode |= S_IFLNK & fs.st_mode;
|
||||||
|
|||||||
@@ -877,7 +877,7 @@ ssize_t PISerial::readDevice(void * read_to, ssize_t max_size) {
|
|||||||
close();
|
close();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
memset(&(PRIVATE->overlap), 0, sizeof(PRIVATE->overlap));
|
piZeroMemory(PRIVATE->overlap);
|
||||||
PRIVATE->overlap.hEvent = PRIVATE->event.getEvent();
|
PRIVATE->overlap.hEvent = PRIVATE->event.getEvent();
|
||||||
PRIVATE->readed = 0;
|
PRIVATE->readed = 0;
|
||||||
ReadFile(PRIVATE->hCom, read_to, max_size, NULL, &(PRIVATE->overlap));
|
ReadFile(PRIVATE->hCom, read_to, max_size, NULL, &(PRIVATE->overlap));
|
||||||
@@ -924,7 +924,7 @@ ssize_t PISerial::writeDevice(const void * data, ssize_t max_size) {
|
|||||||
DWORD wrote(0);
|
DWORD wrote(0);
|
||||||
// piCoutObj << "send ..." << max_size;// << ": " << PIString((char*)data, max_size);
|
// piCoutObj << "send ..." << max_size;// << ": " << PIString((char*)data, max_size);
|
||||||
sending = true;
|
sending = true;
|
||||||
memset(&(PRIVATE->overlap_write), 0, sizeof(PRIVATE->overlap_write));
|
piZeroMemory(PRIVATE->overlap_write);
|
||||||
PRIVATE->overlap_write.hEvent = PRIVATE->event_write.getEvent();
|
PRIVATE->overlap_write.hEvent = PRIVATE->event_write.getEvent();
|
||||||
WriteFile(PRIVATE->hCom, data, max_size, NULL, &(PRIVATE->overlap_write));
|
WriteFile(PRIVATE->hCom, data, max_size, NULL, &(PRIVATE->overlap_write));
|
||||||
if (PRIVATE->event_write.wait()) {
|
if (PRIVATE->event_write.wait()) {
|
||||||
@@ -1160,7 +1160,7 @@ PIVector<PISerial::DeviceInfo> PISerial::availableDevicesInfo(bool test) {
|
|||||||
const HDEVINFO dis = SetupDiGetClassDevs(&(guids[i]), NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
|
const HDEVINFO dis = SetupDiGetClassDevs(&(guids[i]), NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
|
||||||
if (dis == INVALID_HANDLE_VALUE) continue;
|
if (dis == INVALID_HANDLE_VALUE) continue;
|
||||||
SP_DEVINFO_DATA did;
|
SP_DEVINFO_DATA did;
|
||||||
memset(&did, 0, sizeof(did));
|
piZeroMemory(did);
|
||||||
did.cbSize = sizeof(did);
|
did.cbSize = sizeof(did);
|
||||||
DWORD index = 0;
|
DWORD index = 0;
|
||||||
while (SetupDiEnumDeviceInfo(dis, index++, &did)) {
|
while (SetupDiEnumDeviceInfo(dis, index++, &did)) {
|
||||||
|
|||||||
@@ -177,7 +177,7 @@ void PIProcess::startProc(bool detached) {
|
|||||||
# endif
|
# endif
|
||||||
# ifdef WINDOWS
|
# ifdef WINDOWS
|
||||||
GetStartupInfoA(&(PRIVATE->si));
|
GetStartupInfoA(&(PRIVATE->si));
|
||||||
memset(&(PRIVATE->pi), 0, sizeof(PRIVATE->pi));
|
piZeroMemory(PRIVATE->pi);
|
||||||
if (CreateProcessA(0, // No module name (use command line)
|
if (CreateProcessA(0, // No module name (use command line)
|
||||||
a, // Command line
|
a, // Command line
|
||||||
0, // Process handle not inheritable
|
0, // Process handle not inheritable
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ PIStringList PISystemInfo::mountRoots() {
|
|||||||
# ifdef LINUX
|
# ifdef LINUX
|
||||||
PIString s_df, s_m;
|
PIString s_df, s_m;
|
||||||
char in[1024];
|
char in[1024];
|
||||||
memset(in, 0, 1024);
|
piZeroMemory(in, 1024);
|
||||||
FILE * fp = popen("mount -l", "r");
|
FILE * fp = popen("mount -l", "r");
|
||||||
PIStringList tl;
|
PIStringList tl;
|
||||||
if (fp) {
|
if (fp) {
|
||||||
@@ -129,7 +129,7 @@ PIVector<PISystemInfo::MountInfo> PISystemInfo::mountInfo(bool ignore_cache) {
|
|||||||
#ifdef LINUX
|
#ifdef LINUX
|
||||||
PIString s_df, s_m;
|
PIString s_df, s_m;
|
||||||
char in[1024];
|
char in[1024];
|
||||||
memset(in, 0, 1024);
|
piZeroMemory(in, 1024);
|
||||||
// piCout << "mountInfo 0";
|
// piCout << "mountInfo 0";
|
||||||
FILE * fp = popen("df -B1", "r");
|
FILE * fp = popen("df -B1", "r");
|
||||||
PIStringList l_df;
|
PIStringList l_df;
|
||||||
@@ -141,7 +141,7 @@ PIVector<PISystemInfo::MountInfo> PISystemInfo::mountInfo(bool ignore_cache) {
|
|||||||
fp = 0;
|
fp = 0;
|
||||||
}
|
}
|
||||||
// piCout << "mountInfo 1";
|
// piCout << "mountInfo 1";
|
||||||
memset(in, 0, 1024);
|
piZeroMemory(in, 1024);
|
||||||
fp = popen("mount -l", "r");
|
fp = popen("mount -l", "r");
|
||||||
PIStringList tl;
|
PIStringList tl;
|
||||||
if (fp) {
|
if (fp) {
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ ushort charFromCodepage(const char * c, int size, const char * codepage, int * t
|
|||||||
return buffer;
|
return buffer;
|
||||||
# else
|
# else
|
||||||
mbstate_t state;
|
mbstate_t state;
|
||||||
memset(&state, 0, sizeof(state));
|
piZeroMemory(state);
|
||||||
wchar_t wc;
|
wchar_t wc;
|
||||||
ret = mbrtowc(&wc, c, size, &state);
|
ret = mbrtowc(&wc, c, size, &state);
|
||||||
// printf("mbtowc = %d\n", ret);
|
// printf("mbtowc = %d\n", ret);
|
||||||
@@ -369,7 +369,7 @@ PICout operator<<(PICout s, const PIChar & v) {
|
|||||||
UConverter * cc = ucnv_open(__syslocname__, &e);
|
UConverter * cc = ucnv_open(__syslocname__, &e);
|
||||||
if (cc) {
|
if (cc) {
|
||||||
char uc[8];
|
char uc[8];
|
||||||
memset(uc, 0, 8);
|
piZeroMemory(uc, 8);
|
||||||
e = (UErrorCode)0;
|
e = (UErrorCode)0;
|
||||||
ucnv_fromUChars(cc, uc, 8, (const UChar *)(&v.ch), 1, &e);
|
ucnv_fromUChars(cc, uc, 8, (const UChar *)(&v.ch), 1, &e);
|
||||||
ucnv_close(cc);
|
ucnv_close(cc);
|
||||||
|
|||||||
@@ -178,7 +178,7 @@ T toDecimal(const PIString & s) {
|
|||||||
|
|
||||||
#define pisprintf(f, v) \
|
#define pisprintf(f, v) \
|
||||||
char ch[256]; \
|
char ch[256]; \
|
||||||
memset(ch, 0, 256); \
|
piZeroMemory(ch, 256); \
|
||||||
snprintf(ch, 256, f, v); \
|
snprintf(ch, 256, f, v); \
|
||||||
return PIStringAscii(ch);
|
return PIStringAscii(ch);
|
||||||
|
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ PIConditionVariable::PIConditionVariable() {
|
|||||||
# if !defined(MAC_OS)
|
# if !defined(MAC_OS)
|
||||||
pthread_condattr_setclock(&condattr, CLOCK_MONOTONIC);
|
pthread_condattr_setclock(&condattr, CLOCK_MONOTONIC);
|
||||||
# endif
|
# endif
|
||||||
memset(&(PRIVATE->nativeHandle), 0, sizeof(PRIVATE->nativeHandle));
|
piZeroMemory(PRIVATE->nativeHandle);
|
||||||
pthread_cond_init(&PRIVATE->nativeHandle, &condattr);
|
pthread_cond_init(&PRIVATE->nativeHandle, &condattr);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -209,10 +209,10 @@ void PIMutex::init() {
|
|||||||
PRIVATE->mutex = xSemaphoreCreateMutex();
|
PRIVATE->mutex = xSemaphoreCreateMutex();
|
||||||
#else
|
#else
|
||||||
pthread_mutexattr_t attr;
|
pthread_mutexattr_t attr;
|
||||||
memset(&attr, 0, sizeof(attr));
|
piZeroMemory(attr);
|
||||||
pthread_mutexattr_init(&attr);
|
pthread_mutexattr_init(&attr);
|
||||||
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
|
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
|
||||||
memset(&(PRIVATE->mutex), 0, sizeof(PRIVATE->mutex));
|
piZeroMemory(PRIVATE->mutex);
|
||||||
pthread_mutex_init(&(PRIVATE->mutex), &attr);
|
pthread_mutex_init(&(PRIVATE->mutex), &attr);
|
||||||
pthread_mutexattr_destroy(&attr);
|
pthread_mutexattr_destroy(&attr);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -651,9 +651,9 @@ bool PIThread::startOnce(std::function<void()> func) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void PIThread::stopAndWait(PISystemTime timeout) {
|
bool PIThread::stopAndWait(PISystemTime timeout) {
|
||||||
stop();
|
stop();
|
||||||
waitForFinish(timeout);
|
return waitForFinish(timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -791,7 +791,7 @@ void PIThread::setPriority(PIThread::Priority prior) {
|
|||||||
# ifndef WINDOWS
|
# ifndef WINDOWS
|
||||||
// PICout(PICoutManipulators::DefaultControls) << "setPriority" << PRIVATE->thread;
|
// PICout(PICoutManipulators::DefaultControls) << "setPriority" << PRIVATE->thread;
|
||||||
int policy_ = 0;
|
int policy_ = 0;
|
||||||
memset(&(PRIVATE->sparam), 0, sizeof(PRIVATE->sparam));
|
piZeroMemory(PRIVATE->sparam);
|
||||||
pthread_getschedparam(PRIVATE->thread, &policy_, &(PRIVATE->sparam));
|
pthread_getschedparam(PRIVATE->thread, &policy_, &(PRIVATE->sparam));
|
||||||
PRIVATE->sparam.
|
PRIVATE->sparam.
|
||||||
# ifndef LINUX
|
# ifndef LINUX
|
||||||
|
|||||||
@@ -143,15 +143,13 @@ public:
|
|||||||
EVENT_HANDLER0(void, stop);
|
EVENT_HANDLER0(void, stop);
|
||||||
EVENT_HANDLER0(void, terminate);
|
EVENT_HANDLER0(void, terminate);
|
||||||
|
|
||||||
//! \~english Stop thread and wait for finish.
|
bool stopAndWait(int timeout_ms) DEPRECATEDM("use stopAndWait(PISystemTime)") {
|
||||||
//! \~russian Останавливает поток и ожидает завершения.
|
return stopAndWait(PISystemTime::fromMilliseconds(timeout_ms));
|
||||||
void stopAndWait(int timeout_ms) DEPRECATEDM("use waitForStart(PISystemTime)") {
|
|
||||||
stopAndWait(PISystemTime::fromMilliseconds(timeout_ms));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//! \~english Stop thread and wait for finish.
|
//! \~english Stop thread and wait for finish. Returns \b false if timeout expired.
|
||||||
//! \~russian Останавливает поток и ожидает завершения.
|
//! \~russian Останавливает поток и ожидает завершения. Возвращает \b false если таймаут истек.
|
||||||
void stopAndWait(PISystemTime timeout = {});
|
bool stopAndWait(PISystemTime timeout = {});
|
||||||
|
|
||||||
//! \~english Set common data passed to external function
|
//! \~english Set common data passed to external function
|
||||||
//! \~russian Устанавливает данные, передаваемые в функцию потока
|
//! \~russian Устанавливает данные, передаваемые в функцию потока
|
||||||
@@ -194,8 +192,8 @@ public:
|
|||||||
return waitForStart(PISystemTime::fromMilliseconds(timeout_msecs));
|
return waitForStart(PISystemTime::fromMilliseconds(timeout_msecs));
|
||||||
}
|
}
|
||||||
|
|
||||||
//! \~english Wait for thread finish
|
//! \~english Wait for thread finish. Returns \b false if timeout expired.
|
||||||
//! \~russian Ожидает завершения потока
|
//! \~russian Ожидает завершения потока. Возвращает \b false если таймаут истек.
|
||||||
bool waitForFinish(PISystemTime timeout = {});
|
bool waitForFinish(PISystemTime timeout = {});
|
||||||
bool waitForFinish(int timeout_msecs) DEPRECATEDM("use waitForFinish(PISystemTime)") {
|
bool waitForFinish(int timeout_msecs) DEPRECATEDM("use waitForFinish(PISystemTime)") {
|
||||||
return waitForFinish(PISystemTime::fromMilliseconds(timeout_msecs));
|
return waitForFinish(PISystemTime::fromMilliseconds(timeout_msecs));
|
||||||
|
|||||||
@@ -324,7 +324,7 @@ PIString PIDateTime::toString(const PIString & format) const {
|
|||||||
|
|
||||||
time_t PIDateTime::toSecondSinceEpoch() const {
|
time_t PIDateTime::toSecondSinceEpoch() const {
|
||||||
tm pt;
|
tm pt;
|
||||||
memset(&pt, 0, sizeof(pt));
|
piZeroMemory(pt);
|
||||||
pt.tm_sec = seconds;
|
pt.tm_sec = seconds;
|
||||||
pt.tm_min = minutes;
|
pt.tm_min = minutes;
|
||||||
pt.tm_hour = hours;
|
pt.tm_hour = hours;
|
||||||
|
|||||||
@@ -54,6 +54,14 @@ inline void piSleep(double secs) {
|
|||||||
piUSleep(int(secs * 1000000.));
|
piUSleep(int(secs * 1000000.));
|
||||||
} // on !Windows consider constant "usleep" offset
|
} // on !Windows consider constant "usleep" offset
|
||||||
|
|
||||||
|
//! \ingroup Types
|
||||||
|
//! \brief
|
||||||
|
//! \~english Precise sleep for "t" time
|
||||||
|
//! \~russian Точно ожидает время "t"
|
||||||
|
inline void piSleep(PISystemTime t) {
|
||||||
|
t.sleep();
|
||||||
|
}
|
||||||
|
|
||||||
//! \ingroup Types
|
//! \ingroup Types
|
||||||
//! \~english Shortest available on current system sleep
|
//! \~english Shortest available on current system sleep
|
||||||
//! \~russian Наименее возможное для данной системы по длительности ожидание
|
//! \~russian Наименее возможное для данной системы по длительности ожидание
|
||||||
|
|||||||
@@ -548,7 +548,7 @@ void PIOpenCL::Kernel::zero() {
|
|||||||
|
|
||||||
bool PIOpenCL::Kernel::init() {
|
bool PIOpenCL::Kernel::init() {
|
||||||
char kname[1024];
|
char kname[1024];
|
||||||
memset(kname, 0, 1024);
|
piZeroMemory(kname, 1024);
|
||||||
cl_int ret = 0;
|
cl_int ret = 0;
|
||||||
ret = clGetKernelInfo(PRIVATE->kernel, CL_KERNEL_FUNCTION_NAME, 1024, kname, 0);
|
ret = clGetKernelInfo(PRIVATE->kernel, CL_KERNEL_FUNCTION_NAME, 1024, kname, 0);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
@@ -655,14 +655,14 @@ void PIOpenCL::KernelArg::init(void * _k, uint index) {
|
|||||||
cl_kernel k = (cl_kernel)_k;
|
cl_kernel k = (cl_kernel)_k;
|
||||||
cl_int ret = 0;
|
cl_int ret = 0;
|
||||||
char nm[1024];
|
char nm[1024];
|
||||||
memset(nm, 0, 1024);
|
piZeroMemory(nm, 1024);
|
||||||
ret = clGetKernelArgInfo(k, index, CL_KERNEL_ARG_TYPE_NAME, 1024, nm, 0);
|
ret = clGetKernelArgInfo(k, index, CL_KERNEL_ARG_TYPE_NAME, 1024, nm, 0);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
piCout << "[PIOpenCL::Kernel]"
|
piCout << "[PIOpenCL::Kernel]"
|
||||||
<< "clGetKernelArgInfo(CL_KERNEL_ARG_TYPE_NAME) error" << ret;
|
<< "clGetKernelArgInfo(CL_KERNEL_ARG_TYPE_NAME) error" << ret;
|
||||||
}
|
}
|
||||||
type_name = nm;
|
type_name = nm;
|
||||||
memset(nm, 0, 1024);
|
piZeroMemory(nm, 1024);
|
||||||
ret = clGetKernelArgInfo(k, index, CL_KERNEL_ARG_NAME, 1024, nm, 0);
|
ret = clGetKernelArgInfo(k, index, CL_KERNEL_ARG_NAME, 1024, nm, 0);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
piCout << "[PIOpenCL::Kernel]"
|
piCout << "[PIOpenCL::Kernel]"
|
||||||
|
|||||||
@@ -206,7 +206,7 @@ PIString execute(const PIString & cmd) {
|
|||||||
if (fp) {
|
if (fp) {
|
||||||
const int sz = 256;
|
const int sz = 256;
|
||||||
char in[sz];
|
char in[sz];
|
||||||
memset(in, 0, sz);
|
piZeroMemory(in, sz);
|
||||||
while (true) {
|
while (true) {
|
||||||
int r = fread(in, 1, sz, fp);
|
int r = fread(in, 1, sz, fp);
|
||||||
if (r <= 0) break;
|
if (r <= 0) break;
|
||||||
|
|||||||
@@ -125,7 +125,7 @@ void readConsole(int x, int y, int w, int h) {
|
|||||||
bs.X = w;
|
bs.X = w;
|
||||||
bs.Y = h;
|
bs.Y = h;
|
||||||
bc.X = bc.Y = 0;
|
bc.X = bc.Y = 0;
|
||||||
memset(chars, 0, w * h * sizeof(CHAR_INFO));
|
piZeroMemory(chars, w * h * sizeof(CHAR_INFO));
|
||||||
ReadConsoleOutput(console, chars, bs, bc, &(sbi.srWindow));
|
ReadConsoleOutput(console, chars, bs, bc, &(sbi.srWindow));
|
||||||
for (int i = 0; i < h; ++i)
|
for (int i = 0; i < h; ++i)
|
||||||
for (int j = 0; j < w; ++j)
|
for (int j = 0; j < w; ++j)
|
||||||
@@ -249,9 +249,9 @@ int main(int argc, char * argv[]) {
|
|||||||
// piCout << "start";
|
// piCout << "start";
|
||||||
STARTUPINFOA si;
|
STARTUPINFOA si;
|
||||||
PROCESS_INFORMATION pi;
|
PROCESS_INFORMATION pi;
|
||||||
memset(&si, 0, sizeof(si));
|
piZeroMemory(si);
|
||||||
memset(&pi, 0, sizeof(pi));
|
piZeroMemory(pi);
|
||||||
memset(&sbi, 0, sizeof(sbi));
|
piZeroMemory(sbi);
|
||||||
PIString shmh, pname;
|
PIString shmh, pname;
|
||||||
if (argc > 1) shmh = argv[1];
|
if (argc > 1) shmh = argv[1];
|
||||||
if (argc > 2) pname = argv[2];
|
if (argc > 2) pname = argv[2];
|
||||||
|
|||||||
@@ -421,11 +421,12 @@ int main(int argc, char * argv[]) {
|
|||||||
if (sapp) CONNECTU(sapp, messageReceived, menu, messageFromApp);
|
if (sapp) CONNECTU(sapp, messageReceived, menu, messageFromApp);
|
||||||
if (cli.hasArgument("silent")) {
|
if (cli.hasArgument("silent")) {
|
||||||
PICout::setOutputDevices(PICout::Console);
|
PICout::setOutputDevices(PICout::Console);
|
||||||
PIKbdListener ls;
|
PIKbdListener ls(0, 0, false);
|
||||||
ls.enableExitCapture(PIKbdListener::F10);
|
ls.enableExitCapture(PIKbdListener::F10);
|
||||||
ls.start();
|
ls.start();
|
||||||
WAIT_FOR_EXIT
|
while (!PIKbdListener::exiting)
|
||||||
ls.stopAndWait();
|
piMSleep(PIP_MIN_MSLEEP * 5);
|
||||||
|
if (!ls.stopAndWait(1_s)) ls.terminate();
|
||||||
} else {
|
} else {
|
||||||
screen->start();
|
screen->start();
|
||||||
screen->waitForFinish();
|
screen->waitForFinish();
|
||||||
|
|||||||
Reference in New Issue
Block a user