導航:首頁 > 源碼編譯 > 程序編譯唯一實例

程序編譯唯一實例

發布時間:2022-06-17 13:29:02

『壹』 C++Builder程序怎麼實現啟動唯一實例

單例模式 ,1 構造私有 2 靜態對象私有 3 提供靜態公共函數
如下:

class CSingleton
{
private:
CSingleton() //構造函數是私有的
{
}
static CSingleton *m_pInstance;
public:
static CSingleton * GetInstance()
{
if(m_pInstance == NULL) //判斷是否第一次調用
m_pInstance = new CSingleton();
return m_pInstance;
}
};
只能構造一個實例

『貳』 C語言中條件編譯的實例

條件編譯命令最常見的形式為:
#ifdef 標識符
程序段1
#else
程序段2
#endif
它的作用是:當標識符已經被定義過(一般是用#define命令定義),則對程序段1進行編譯,否則編譯程序段2。
其中#else部分也可以沒有,即:
#ifdef
程序段1
#endif
這里的「程序段」可以是語句組,也可以是命令行。這種條件編譯可以提高C源程序的通用性。如果一個C源程序在不同計算機系統上系統上運行,而不同的計算機又有一定的差異。例如,我們有一個數據類型,在Windows平台中,應該使用long類型表示,而在其他平台應該使用float表示,這樣往往需要對源程序作必要的修改,這就降低了程序的通用性。

『叄』 vb編譯的exe,如何才能讓它只允許一個實例

檢查App.PrevInstance 如不是0,表示已有實例在運行了。
比如從Main啟動的:
sub main()
if App.PrevInstance=0 then
form1.show'打開主窗口
end if
end sub

『肆』 c語言怎樣讓編譯出來的程序最多隻有一個實例

那你要負責,看進程里有已經有……就覆蓋不新建。這個開發環境里有吧。
另外程序結束了咋不關閉窗口,現在程序不都是自己開自己窗口的,大多數都是。

『伍』 我在書上看到的一個程序實例,為什麼編譯出錯呢程序如下:

這不是完整的程序。
只是一個大程序中的一個子程序。

要想編譯、執行,還要增加一些代碼。
如下即可:
ASSUME CS: CODES

CODES SEGMENT
;--------------------------------
SOUND PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DI
MOV AL, 0B6H
OUT 43H, AL

MOV DX, 12H
MOV AX, 34DCH
DIV DI ;DI = f
OUT 42H, AL
MOV AL, AH
OUT 42H, AL

IN AL, 61H
MOV AH, AL
OR AL, 3
OUT 61H, AL
DELAY:
MOV CX, 2801
DL10ms:
LOOP DL10ms
DEC BX
JNZ DELAY

MOV AL, AH
OUT 61H, AL

POP DI
POP DX
POP CX
POP BX
POP AX
RET
SOUND ENDP
;--------------------------------
START:
MOV AX, CODES
MOV DS, AX

MOV DI, 220
CALL SOUND
MOV DI, 440
CALL SOUND
MOV DI, 880
CALL SOUND

EXIT:
MOV AH, 4CH
INT 21H
CODES ENDS
END START

『陸』 請問linux下,gcc編譯程序的過程(從讀取源文件到製作可執行程序中間所有過程,越詳細越好)

gcc -S *.c 預處理+反匯編

『柒』 如何用Qt寫一個同一時間只能運行一個實例的應用程序

為了使一個應用程序在同一時間只運行一個實例,需要用某種方法在程序啟動時,檢測是否已有正在運行的實例,如果有,則將本次啟動的參數傳遞給前一個實例(例如需要打開的文檔的路徑),如果沒有,則正常啟動。
實現的方法有多種:
1. 用Windows API創建一個互斥量:
#include <windows.h>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

HANDLE hMutex = CreateMutex(NULL, TRUE, L"YourApp"); // 創建一個互斥量來保證只運行一個實例
if(hMutex != NULL)
{
if(GetLastError() == ERROR_ALREADY_EXISTS)
{
QMessageBox::critical(qApp->activeWindow(), QObject::tr("An instance of this application has been run!"), QObject::tr("Only one instance can be run at a time!"));
return 1;
}
}

... // 以下是正常啟動代碼
}
註:如果保險起見,CreateMutex()中的字元串應該用一個GUID來保證其唯一性,Visual Studio中有一個生成GUID的工具,菜單「工具」->「創建GUID」,選擇合適的定義形式,創建並拷貝到剪貼板即可。

此方法的缺點:1.使用了Windows API,不能跨平台;2.不能自動激活前一個實例的窗口。
2. 每次啟動時用Windows API枚舉進程,同時在第一次運行時用SetProp()函數給當前窗口設置屬性,這樣下次啟動時,在枚舉的進程中查找具有這個屬性的窗口,若找到,說明已有實例在運行,將該實例的窗口激活;若未找到則正常啟動。
此方法客服了前一方法的第2個缺點,但過於依賴Windows API函數(似乎還是MFC函數,對Qt程序好像不可行)。有興趣的可以照這個鏈接里的代碼試試
3. 利用QLocalSocket和QLocalServer,基本的思路是:
應用程序啟動時首先嘗試去連接一個QLocalServer,如果連接失敗,說明自己是第一個實例,於是創建這么一個QLocalServer,否則將啟動參數發送給QLocalServer然後退出。第一個實例的QLocalServer在收到後面啟動的實例發來的參數時可以進行處理(例如激活第一個實例的窗口)。這個鏈接里有詳細的示例代碼供參考。
註:使用QLocalSocket和QLocalServer時,需要把QtNetwork庫包含在項目文件中;
4. 用Qt Solutions里提供的QtSingleApplication類(最簡單的方法,推薦)
從ftp://ftp.qt.nokia.com/qt/solutions/lgpl/ 下載QtSingleApplication的源碼包,解壓縮後按照INSTALL.TXT里的說明進行配置和編譯,我選擇編譯成動態庫,這樣下次再用,只需引用頭文件和lib文件即可,比較方便。
用法很簡單,只需把原來main()里的QApplication對象換成QtSingleApplication對象,調用一下isRunning()方法進行判斷即可。
// 原來的代碼
int main(int argc, char **argv)
{
QApplication app(argc, argv);

MyMainWidget mmw;

mmw.show();
return app.exec();
}

// 修改後的代碼
int main(int argc, char **argv)
{
QtSingleApplication app(argc, argv);

if (app.isRunning())
return 0;

MyMainWidget mmw;
mmw.show();
return app.exec();
}
注1:QtSingleApplication的實現方法基本上也是利用QLocalServer和QLocalSocket,所以同樣依賴於QtNetwork庫;
注2:以上代碼只展示了QtSingleApplication最簡單的用法,這個類還有更多用法,請參考源碼包中帶的範例和文檔。
QtSingleApplication的幾種用法(直接使用源碼,編譯成動態庫等)可以參考這個鏈接:Qt程序只運行一個實例

『捌』 C/C++中 如何只允許運行一個程序實例多列一些方法。

一般來說的辦法就是怎麼想讓第二次運行知道已經有程序在運行了,或者說怎麼能通知第二個程序已經有文件在運行了

例如程序運行後如果程序運行目錄沒有文件a.txt,就在程序運行目錄新建一個文件a.txt,關閉的時候刪除,這樣第二次運行發現已存在了這個文件,說明程序已經在運行,故第二次運行直接退出

例如第一個運行程序用系統函數在本地監聽一個socket埠,第二次運行程序發現這個埠已經被佔用或者能連接,就知道已經有程序在運行了(例如smplayer就這樣搞的)

例如第一個運行的程序在注冊表某個地方寫入一個1,退出時寫入0,第二次運行的程序發現注冊表這個地方是1就退出,如果是0就可以繼續運行了,也就是其實是第一次運行

反正無論什麼辦法,具體要看你覺得怎麼樣合適才行的呢。還可以去找系統的進程列表,還可以測試某些環境變數啊,反正方法是很多的是死的,人是活的。

『玖』 4個c#程序如何編譯請高手以實例截圖說明

你說的編譯是使用這些類還是怎麼樣
不太明白

『拾』 能不能舉個簡單例子說下編譯的過程

使用工具編譯的過程吧?用個C語言的例子吧:
首先,預編譯,對源代碼的宏進行替換,生成中間文件(文本,默認不保留)。
再是,翻譯為匯編代碼(文本,默認不保留)。
然後,由匯編器生成二進制文件(.obj)。
最後,連接為可執行文件。
因為前兩步一般不保留中間文件,所以你看到的是編譯器「直接」編譯成了.obj文件。

閱讀全文

與程序編譯唯一實例相關的資料

熱點內容
本科程序員五年工資 瀏覽:899
創維電視櫃怎麼安裝app 瀏覽:850
可愛的程序員陸漓劇照 瀏覽:850
怎樣把截屏壓縮成300kb 瀏覽:224
dart文件加密 瀏覽:39
java對接攝像頭源碼 瀏覽:885
安卓項目開發實例附源碼 瀏覽:728
程序員蘋果全家桶 瀏覽:197
遠程命令阻塞 瀏覽:730
有網頁源碼怎麼查數據 瀏覽:100
win10下make編譯速度過慢 瀏覽:866
微機原理編譯環境 瀏覽:18
怎麼把圖紙轉換成pdf 瀏覽:540
安卓libcurl編譯64 瀏覽:904
手機app怎麼測速 瀏覽:275
中興gpon命令 瀏覽:885
python中取出字典key值 瀏覽:682
Linux目錄inode 瀏覽:147
手機上如何用文件夾發郵件 瀏覽:429
暢課app密碼忘了怎麼找回 瀏覽:79