导航:首页 > 源码编译 > 程序编译唯一实例

程序编译唯一实例

发布时间: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文件。

阅读全文

与程序编译唯一实例相关的资料

热点内容
linuxzone 浏览:746
androidapi版本号 浏览:784
小猪佩奇配音解压吃东西 浏览:283
程序员怎么申请公司年会 浏览:870
圈店app的预约头条功能怎么样 浏览:34
云服务器设置ad域 浏览:316
我的世界无尽贪婪奇点压缩器 浏览:394
源码资源免费分享网 浏览:686
批量qq号有效验证源码 浏览:512
本科程序员五年工资 浏览:902
创维电视柜怎么安装app 浏览:853
可爱的程序员陆漓剧照 浏览:851
怎样把截屏压缩成300kb 浏览:225
dart文件加密 浏览:40
java对接摄像头源码 浏览:887
安卓项目开发实例附源码 浏览:730
程序员苹果全家桶 浏览:198
远程命令阻塞 浏览:731
有网页源码怎么查数据 浏览:101
win10下make编译速度过慢 浏览:867