Repository navigation
Expand file tree
/
Copy pathPipeReadThread.cpp
More file actions
39 lines (37 loc) · 918 Bytes
/
Copy pathPipeReadThread.cpp
File metadata and controls
39 lines (37 loc) · 918 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include "PipeReadThread.h"
#include "wxCatapultApp.h"
#include <wx/wxprec.h>
#ifdef __UNIX__
#include <unistd.h>
#endif
PipeReadThread::PipeReadThread(wxWindow* target, int id, wxThreadKind kind)
: wxThread(kind)
{
m_target = target;
m_id = id;
}
wxThread::ExitCode PipeReadThread::Entry()
{
while (true) {
char buffer[1000];
#ifdef __UNIX__
ssize_t bytesRead = read(m_descriptor, buffer, 1000);
if (bytesRead <= 0) break;
#else
DWORD bytesRead;
if (!ReadFile(m_hTarget, buffer, 1000, &bytesRead, nullptr)) break;
#endif
wxString* eventClientData = new wxString(buffer, wxConvUTF8, bytesRead);
wxCommandEvent event(EVT_CONTROLLER);
event.SetId(m_id);
event.SetClientData(eventClientData);
wxPostEvent(m_target, event);
}
#ifdef __UNIX__
close(m_descriptor);
#endif
wxCommandEvent endEvent(EVT_CONTROLLER);
endEvent.SetId(MSGID_ENDPROCESS);
wxPostEvent(m_target, endEvent);
return 0;
}