+ multiple process entries per event type
This commit is contained in:
parent
b9882cb181
commit
3c76d941fa
@ -37,8 +37,11 @@ namespace vkvm {
|
|||||||
|
|
||||||
auto callEvent(EventType type) -> bool {
|
auto callEvent(EventType type) -> bool {
|
||||||
auto ivt = getInterrupTable();
|
auto ivt = getInterrupTable();
|
||||||
if (ivt[type].pid != 0) {
|
for(int i = 0; i < impl.interruptEntrysPerEventType;i++){
|
||||||
sendSignal(ivt[type].pid, ivt[type].signum);
|
auto &entry= ivt[type * impl.interruptEntrysPerEventType + i];
|
||||||
|
if (entry.pid != 0) {
|
||||||
|
sendSignal(entry.pid, entry.signum);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -54,7 +54,8 @@ constexpr int keyboardBufferSize = 16;
|
|||||||
int sharedMemoryPid;
|
int sharedMemoryPid;
|
||||||
key_t sharedMemoryKey;
|
key_t sharedMemoryKey;
|
||||||
int sharedMemorySize;
|
int sharedMemorySize;
|
||||||
int interruptEntyCount = 64; //NOLINT
|
int interruptEntyCount = 256; //NOLINT
|
||||||
|
int interruptEntrysPerEventType = 8;
|
||||||
int reservedSize = 1024; //NOLINT
|
int reservedSize = 1024; //NOLINT
|
||||||
std::vector<std::function<void()>> eventTable;
|
std::vector<std::function<void()>> eventTable;
|
||||||
};
|
};
|
||||||
|
30
src/vkvm.cpp
30
src/vkvm.cpp
@ -37,21 +37,27 @@ namespace vkvm {
|
|||||||
|
|
||||||
lockSharedMemory();
|
lockSharedMemory();
|
||||||
|
|
||||||
ivt[type].pid = getpid();
|
for(int i = 0; i < impl.interruptEntrysPerEventType;i++){
|
||||||
ivt[type].signum = signum;
|
auto &entry= ivt[type * impl.interruptEntrysPerEventType + i];
|
||||||
impl.eventTable.push_back(handler);
|
if (entry.pid == 0) {
|
||||||
|
|
||||||
onSignal(signum, [](int sig){
|
entry.pid = getpid();
|
||||||
if(sig >= SIGUSR1){
|
entry.signum = signum;
|
||||||
if((sig - SIGUSR1) < impl.eventTable.size()){
|
impl.eventTable.push_back(handler);
|
||||||
impl.eventTable[sig - SIGUSR1]();
|
|
||||||
}
|
onSignal(signum, [](int sig){
|
||||||
|
if(sig >= SIGUSR1){
|
||||||
|
if((sig - SIGUSR1) < impl.eventTable.size()){
|
||||||
|
impl.eventTable[sig - SIGUSR1]();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
unlockSharedMemory();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
|
||||||
unlockSharedMemory();
|
unlockSharedMemory();
|
||||||
|
return false;
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
auto setPixel(int x, int y, Color color) -> bool {
|
auto setPixel(int x, int y, Color color) -> bool {
|
||||||
|
Loading…
Reference in New Issue
Block a user