要实现以下功能,请问如何做?(关于程序启动一次) 将变量作为App的成员变量可以在任何地方使用AfxGetApp()获取你的App实例,从而获取该变量值。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以建立,如果两个窗口在同一个线程中,简单的方法是定义一个全局的数组,也可以定义在CXXApp中。不在同一个线程中,就使用内存文件映射。 用内存映射文件可以,我不知道如果一个单文档应用程序启动时,应该在那里判断是否已经有自身的实例启动,并且退出自己呢,能否发给一个程序?[email protected] 应该在App的初始化代码处判断比较常见的是利用Mutex来实现 是否检查到有程序加载就在BOOL CMyApp::InitInstance(){ if (程序以加载)return FALSE;}顺便问一个问题,我想实现当已经有实例运行,之后的实例不运行,而是应该激活先前实例,使用Mutex信号量可以做到么?如果可以,如何做我想应用程序启动时,建立内存映射文件,并向其中写入我的标志信息,如状态,窗口句柄。这样一边之后的程序可以利用这些信息进行激活操作。看书写了如下代码:hMapping=CreateFileMapping( (HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,0x0100,"MYSHARE");if(hMapping==NULL){ cout<<"Error"; exit(1); }int *i;i=(int*)MapViewOfFile(hMapping,FILE_MAP_ALL_ACCESS,0,0,0);*i=998;这里我想不通一个问题,使用MapViewOfFile进行内存的映射,看到Msdn中函数原型如下:LPVOID MapViewOfFile( HANDLE hFileMappingObject, // file-mapping object to map into // address space DWORD dwDesiredAccess, // access mode DWORD dwFileOffsetHigh, // high-order 32 bits of file offset DWORD dwFileOffsetLow, // low-order 32 bits of file offset DWORD dwNumberOfBytesToMap // number of bytes to map);我觉得其中 dwFileOffsetHigh dwFileOffsetLow指出了映射的偏移地址,我觉得应该是相对于前面使用CreateFileMapping中第二个参数0x0100指定的空间大小的偏移指针返回给我的 int *i;这时我对该指针的操作就应该是对这个空间的使用但我写了如下语句,试图再次调用MapViewOfFile再从我的0x100大小空间返回一个偏移指针,对其进行修改。如 int *j;j=(int*)MapViewOfFile(hMapping,FILE_MAP_ALL_ACCESS,0,10,0);<--试图偏移10个字节,但当执行下句时会出错。*j=998;没办法我只能使用一次int *i;后 令 int *j; j=i+10; *j=99;不知道如果把应用程序句柄等几个变量以这种方式存入,是否可以达到我的功能。问问小问题,如何知道一个应用程序的句柄,激活它。我这样做可以么〉 怎么提高硬盘的写入速度啊 帮帮忙啊 这个程序结构有没有问题? 带有选择文件功能的列表框? 如何限制某个SOCKET发送文件的速度---顶者有分 有高手熟悉CIPAddressCtrl类的使用吗?请赐教 我想学vc 文字输出问题 谁知道相关API可以清楚所有cookies,或自写函数给个例子。100分送上 关于在ATL编写的COM中使用对话框的问题,先送上45分! 向其它的窗口发消息为什么没有响应? 向各位大佬求助MFC中断言失败问题 在console下,如何编译基于窗口的程序呢 有没有谁能让CRichEditView实现类似超级连接的功能?也就是说有些文字可以点击,当然程序也要能捕获这个点击
[email protected]
比较常见的是利用Mutex来实现
在BOOL CMyApp::InitInstance()
{
if (程序以加载)return FALSE;
}
顺便问一个问题,我想实现当已经有实例运行,之后的实例不运行,而是应该激活
先前实例,使用Mutex信号量可以做到么?如果可以,如何做
我想应用程序启动时,建立内存映射文件,并向其中写入我的标志信息,如状态,窗口句柄。这样一边之后的程序可以利用这些信息进行激活操作。
看书写了如下代码:
hMapping=CreateFileMapping(
(HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,0x0100,"MYSHARE");
if(hMapping==NULL)
{
cout<<"Error";
exit(1);
}
int *i;
i=(int*)MapViewOfFile(hMapping,FILE_MAP_ALL_ACCESS,0,0,0);
*i=998;
这里我想不通一个问题,使用MapViewOfFile进行内存的映射,看到Msdn中函数原型如下:
LPVOID MapViewOfFile(
HANDLE hFileMappingObject, // file-mapping object to map into
// address space
DWORD dwDesiredAccess, // access mode
DWORD dwFileOffsetHigh, // high-order 32 bits of file offset
DWORD dwFileOffsetLow, // low-order 32 bits of file offset
DWORD dwNumberOfBytesToMap // number of bytes to map
);
我觉得其中 dwFileOffsetHigh dwFileOffsetLow指出了映射的偏移地址,我觉得应该是相对于前面使用CreateFileMapping中第二个参数0x0100指定的空间大小的偏移指针返回给我的 int *i;这时我对该指针的操作就应该是对这个空间的使用
但我写了如下语句,试图再次调用MapViewOfFile再从我的0x100大小空间返回一个偏移指针,对其进行修改。
如 int *j;
j=(int*)MapViewOfFile(hMapping,FILE_MAP_ALL_ACCESS,0,10,0);<--试图偏移10个字节,但当执行下句时会出错。
*j=998;
没办法我只能使用一次int *i;后 令 int *j; j=i+10; *j=99;
不知道如果把应用程序句柄等几个变量以这种方式存入,是否可以达到我的功能。
问问小问题,如何知道一个应用程序的句柄,激活它。我这样做可以么〉