1
0
Fork 0

BRIDGE+GUI: GuiExecuteOnGuiThreadEx

This commit is contained in:
Duncan Ogilvie 2019-06-22 15:05:59 +02:00
parent 3dc120d623
commit fc9f9a52fd
No known key found for this signature in database
GPG Key ID: FC89E0AAA0C1AAD8
6 changed files with 24 additions and 10 deletions

View File

@ -1548,7 +1548,10 @@ BRIDGE_IMPEXP void GuiCloseQWidgetTab(void* qWidget)
BRIDGE_IMPEXP void GuiExecuteOnGuiThread(GUICALLBACK cbGuiThread)
{
_gui_sendmessage(GUI_EXECUTE_ON_GUI_THREAD, (void*)cbGuiThread, nullptr);
GuiExecuteOnGuiThreadEx([](void* cb)
{
((GUICALLBACK)cb)();
}, cbGuiThread);
}
BRIDGE_IMPEXP void GuiUpdateTimeWastedCounter()
@ -1720,6 +1723,11 @@ BRIDGE_IMPEXP void GuiInvalidateSymbolSource(duint base)
_gui_sendmessage(GUI_INVALIDATE_SYMBOL_SOURCE, (void*)base, nullptr);
}
BRIDGE_IMPEXP void GuiExecuteOnGuiThreadEx(GUICALLBACKEX cbGuiThread, void* userdata)
{
_gui_sendmessage(GUI_EXECUTE_ON_GUI_THREAD, (void*)cbGuiThread, userdata);
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
hInst = hinstDLL;

View File

@ -1122,7 +1122,7 @@ typedef enum
GUI_ADD_QWIDGET_TAB, // param1=QWidget*, param2=unused
GUI_SHOW_QWIDGET_TAB, // param1=QWidget*, param2=unused
GUI_CLOSE_QWIDGET_TAB, // param1=QWidget*, param2=unused
GUI_EXECUTE_ON_GUI_THREAD, // param1=GUICALLBACK, param2=unused
GUI_EXECUTE_ON_GUI_THREAD, // param1=GUICALLBACKEX cb, param2=void* userdata
GUI_UPDATE_TIME_WASTED_COUNTER, // param1=unused, param2=unused
GUI_SET_GLOBAL_NOTES, // param1=const char* text, param2=unused
GUI_GET_GLOBAL_NOTES, // param1=char** text, param2=unused
@ -1171,6 +1171,7 @@ typedef enum
struct _TYPEDESCRIPTOR;
typedef void (*GUICALLBACK)();
typedef void (*GUICALLBACKEX)(void*);
typedef bool (*GUISCRIPTEXECUTE)(const char* text);
typedef void (*GUISCRIPTCOMPLETER)(const char* text, char** entries, int* entryCount);
typedef bool (*TYPETOSTRING)(const struct _TYPEDESCRIPTOR* type, char* dest, size_t* destCount); //don't change destCount for final failure
@ -1342,6 +1343,7 @@ BRIDGE_IMPEXP void GuiReferenceAddCommand(const char* title, const char* command
BRIDGE_IMPEXP void GuiUpdateTraceBrowser();
BRIDGE_IMPEXP void GuiOpenTraceFile(const char* fileName);
BRIDGE_IMPEXP void GuiInvalidateSymbolSource(duint base);
BRIDGE_IMPEXP void GuiExecuteOnGuiThreadEx(GUICALLBACKEX cbGuiThread, void* userdata);
#ifdef __cplusplus
}

View File

@ -591,9 +591,13 @@ void* Bridge::processMessage(GUIMSG type, void* param1, void* param2)
break;
case GUI_EXECUTE_ON_GUI_THREAD:
GuiAddLogMessage(QString().sprintf("thread id (bridge) %X\n", GetCurrentThreadId()).toUtf8().constData());
emit executeOnGuiThread(param1);
break;
{
if(GetCurrentThreadId() == dwMainThreadId)
((GUICALLBACKEX)param1)(param2);
else
emit executeOnGuiThread(param1, param2);
}
break;
case GUI_UPDATE_TIME_WASTED_COUNTER:
emit updateTimeWastedCounter();

View File

@ -126,7 +126,7 @@ signals:
void addQWidgetTab(QWidget* qWidget);
void showQWidgetTab(QWidget* qWidget);
void closeQWidgetTab(QWidget* qWidget);
void executeOnGuiThread(void* cbGuiThread);
void executeOnGuiThread(void* cbGuiThread, void* userdata);
void updateTimeWastedCounter();
void setGlobalNotes(const QString text);
void getGlobalNotes(void* text);

View File

@ -89,7 +89,7 @@ MainWindow::MainWindow(QWidget* parent)
connect(Bridge::getBridge(), SIGNAL(addQWidgetTab(QWidget*)), this, SLOT(addQWidgetTab(QWidget*)));
connect(Bridge::getBridge(), SIGNAL(showQWidgetTab(QWidget*)), this, SLOT(showQWidgetTab(QWidget*)));
connect(Bridge::getBridge(), SIGNAL(closeQWidgetTab(QWidget*)), this, SLOT(closeQWidgetTab(QWidget*)));
connect(Bridge::getBridge(), SIGNAL(executeOnGuiThread(void*)), this, SLOT(executeOnGuiThread(void*)));
connect(Bridge::getBridge(), SIGNAL(executeOnGuiThread(void*, void*)), this, SLOT(executeOnGuiThread(void*, void*)));
connect(Bridge::getBridge(), SIGNAL(dbgStateChanged(DBGSTATE)), this, SLOT(dbgStateChangedSlot(DBGSTATE)));
connect(Bridge::getBridge(), SIGNAL(addFavouriteItem(int, QString, QString)), this, SLOT(addFavouriteItem(int, QString, QString)));
connect(Bridge::getBridge(), SIGNAL(setFavouriteItemShortcut(int, QString, QString)), this, SLOT(setFavouriteItemShortcut(int, QString, QString)));
@ -1655,9 +1655,9 @@ void MainWindow::closeQWidgetTab(QWidget* qWidget)
}
}
void MainWindow::executeOnGuiThread(void* cbGuiThread)
void MainWindow::executeOnGuiThread(void* cbGuiThread, void* userdata)
{
((GUICALLBACK)cbGuiThread)();
((GUICALLBACKEX)cbGuiThread)(userdata);
}
void MainWindow::tabMovedSlot(int from, int to)

View File

@ -142,7 +142,7 @@ public slots:
void addQWidgetTab(QWidget* qWidget);
void showQWidgetTab(QWidget* qWidget);
void closeQWidgetTab(QWidget* qWidget);
void executeOnGuiThread(void* cbGuiThread);
void executeOnGuiThread(void* cbGuiThread, void* userdata);
void tabMovedSlot(int from, int to);
void chkSaveloadTabSavedOrderStateChangedSlot(bool state);
void dbgStateChangedSlot(DBGSTATE state);