wxWidgets教程(11) App與程序管理

2021-08-10 12:18:24 字數 2060 閱讀 9425

onexit:程式結束呼叫。

processpendingevents:queueevent與addpendingevent傳送的事件,由此呼叫處理。

onassertfailure:wxassert判斷失敗會呼叫。

很多函式不太常用。

二、事件wxevthandler

1、connect | disconnect : 動態繫結事件與控制項。

2、queueevent:工作執行緒向主視窗執行緒,非同步傳送事件,一般傳送wxthreadevent事件的clone版本,易攜帶wxstring。

3、addpendingevent:和queueevent差不多,只是不能攜帶wxstring。

三、wxexecute與wxprocess

1、wxexecute的引數之中有wxprocess,用來溝通主程序與子程序之間的通訊管道,在做引數之前,需要呼叫wxprocess-》redirect函式。

2、呼叫kill與open可以終止乙個程序和執行乙個cmd命令。

3、wxexec_async:非同步呼叫子程式,wxprocess程序結束以後會自動銷毀,不需要delete,wxexecute返回值為程序的id(pid)。

4、wxexec_sync:同步呼叫子程式,阻塞我們的應用程式,直到wxprocess結束,需要手動delete掉wxprocess,wxexecute返回值為程序的退出碼。

5、通過wxprocess來獲取子程序的標準輸出流wxinputstream,要注意,非同步呼叫的話,一旦子程序退出,wxprocess就被刪除了,那麼再去獲取wxinputstream會報異常;同步呼叫的話,子程序退出,但是wxprocess並沒有被刪除,而是等待我們自己來刪除,所以還是能獲取到wxinputstream的。

6、為了解決wxprocess在非同步呼叫下,仍然能獲取到輸出流,可以定義個成員變數緩衝區,在wxexecute呼叫後立即獲取wxinputstream,並把所有的資料拷貝到成員變數緩衝區,留著以後使用。

四、wxsingleinstancechecker

這個類可以實現單一程序。

下面是實際當中的使用示例:

#pragma once

#define wxuse_gui 0

;

#include #include wxdefine_event(wxmy_evt_1, wxthreadevent);

// 獲取user32.dll的messagebox方法

if (m_dynlib.load(wxt("user32.dll")))

} // wxprocess使用,非同步讀取另乙個程式的標準輸出

m_process = new wxprocess(this);

m_process->redirect();

wxexecute(wxt("cmd /k \"d:\\cpp\\pro\\win32demo1\\debug\\win32demo1.exe\""),wxexec_async, m_process);

wxtextinputstream tis(*(process->getinputstream()));

wxstring buf = tis.readline();

// 臨時開啟乙個detach執行緒,來模擬傳送執行緒事件

std::thread t([this]() );

t.detach();

// 呼叫父類預設的初始化函式,初始化一些命令列引數注入等

return __super::oninit();

} return __super::filterevent(event);

} //獲取f引數

long param_f;

if (parser.found(wxt("n"), ¶m_f))

// 返回false,這會讓oninit返回false來結束程式

// 返回true,繼續執行程式

return true;

}

wxWidgets教程(2) 事件處理

wxwidgets是事件驅動的,使用下面的巨集 declare event table 宣告乙個事件巨集 enum idlist begin event table mywxframe,wxframe evt button id btn 1,mywxframe ontips 將按鈕與函式繫結 end...

Openwrt無線中繼AP設定教程

本篇博文參考來自 主路由器使用ap模式發射wifi 從路由器使用client模式接受wifi 從路由器使用master模式發射wifi 連入從路由器的裝置也能訪問外網 只需要設定從路由器即可 主路由器已經能夠訪問外網 從路由器的內部系統是openwrt 從介面顯示來說我已經配置成功了 設定從路由器l...

mysql介面教程 MySQL的C語言API介面

1 首先當然是連線資料庫,函式原型如下 mysql stdcall mysql real connect mysql mysql,const char host,const char user,const char passwd,const char db,unsigned int port,con...