небольшая чистка и улучшение кода, попытка исправить picloud

This commit is contained in:
Бычков Андрей
2022-11-07 17:16:27 +03:00
parent 8a5e72c723
commit f08a07cab0
11 changed files with 54 additions and 79 deletions

View File

@@ -977,14 +977,14 @@ bool PIEthernet::connectTCP() {
#ifdef WINDOWS
long PIEthernet::waitForEvent(long mask) {
if (!PRIVATE->event.isCreate() || sock < 0) return 0;
WSAEventSelect(sock, PRIVATE->event.event, mask);
WSAEventSelect(sock, PRIVATE->event.getEvent(), mask);
if (PRIVATE->event.wait()) {
//DWORD wr = WSAWaitForMultipleEvents(1, &(PRIVATE->read_event), FALSE, WSA_INFINITE, TRUE);
//piCout << "wait result" << wr;
//if (wr == WSA_WAIT_EVENT_0) {
WSANETWORKEVENTS events;
memset(&events, 0, sizeof(events));
WSAEnumNetworkEvents(sock, PRIVATE->event.event, &events);
WSAEnumNetworkEvents(sock, PRIVATE->event.getEvent(), &events);
//piCout << "wait result" << events.lNetworkEvents;
return events.lNetworkEvents;
}

View File

@@ -439,9 +439,7 @@ PIByteArray PIFile::get() {
ssize_t PIFile::readDevice(void * read_to, ssize_t max_size) {
if (!canRead() || PRIVATE->fd == 0) return -1;
reading_now = true;
ssize_t ret = fread(read_to, 1, max_size, PRIVATE->fd);
reading_now = false;
return ret;
}

View File

@@ -217,11 +217,8 @@ void PIIODevice::stopThreadedRead() {
read_thread.stop();
if (!destroying) {
interrupt();
stopThreadedReadDevice();
}
if (reading_now) {
read_thread.terminate();
reading_now = false;
} else {
piCoutObj << "Error: Device is running after destructor!";
}
#endif
}
@@ -307,7 +304,6 @@ ssize_t PIIODevice::write(const void * data, ssize_t max_size) {
void PIIODevice::_init() {
reading_now = false;
setOptions(0);
setReopenEnabled(true);
setReopenTimeout(1000);

View File

@@ -498,10 +498,6 @@ protected:
//! \~english Function executed when thread read some data, default implementation execute external callback "ret_func_"
//! \~russian Метод вызывается после каждого успешного потокового чтения, по умолчанию вызывает callback "ret_func_"
virtual bool threadedRead(const uchar * readed, ssize_t size);
//! \~english Function executed after PIThread::stop() and PIThread::interrupt() of read thread
//! \~russian Метод вызывается после PIThread::stop() и PIThread::interrupt() потока чтения
virtual void stopThreadedReadDevice() {}
//! \~english Reimplement to construct full unambiguous string, describes this device.
//! Default implementation returns \a path()
@@ -549,10 +545,6 @@ protected:
bool opened_ = false;
void * ret_data_ = nullptr;
//! \~english Set this flag while blocking operations
//! \~russian Устанавливайте этот флаг во время блокирующих операций
std::atomic_bool reading_now;
private:
EVENT_HANDLER(void, read_func);
EVENT_HANDLER(void, write_func);

View File

@@ -814,7 +814,7 @@ ssize_t PISerial::readDevice(void * read_to, ssize_t max_size) {
if (sending) return -1;
//piCoutObj << "read ..." << PRIVATE->hCom;
memset(&(PRIVATE->overlap), 0, sizeof(PRIVATE->overlap));
PRIVATE->overlap.hEvent = PRIVATE->event.event;
PRIVATE->overlap.hEvent = PRIVATE->event.getEvent();
ReadFile(PRIVATE->hCom, read_to, max_size, NULL, &(PRIVATE->overlap));
PRIVATE->readed = 0;
if (PRIVATE->event.wait()) {
@@ -860,7 +860,7 @@ ssize_t PISerial::writeDevice(const void * data, ssize_t max_size) {
//piCoutObj << "send ..." << max_size;// << ": " << PIString((char*)data, max_size);
sending = true;
memset(&(PRIVATE->overlap_write), 0, sizeof(PRIVATE->overlap_write));
PRIVATE->overlap_write.hEvent = PRIVATE->event_write.event;
PRIVATE->overlap_write.hEvent = PRIVATE->event_write.getEvent();
WriteFile(PRIVATE->hCom, data, max_size, NULL, &(PRIVATE->overlap_write));
if (PRIVATE->event_write.wait()) {
GetOverlappedResult(PRIVATE->hCom, &(PRIVATE->overlap_write), &wrote, FALSE);