我正在开发2个Windows服务,它有一个公共数据库,我想用系统Mutex锁定(交叉处理).
现在我不知道是否它的确定只是调用WaitOne()和ReleaseMutex()在一个try-finally块或者我应该也配置互斥(例如,在一个using块).如果是这样,我想我应该永远赶AbandonedMutexException在WaitOne()方法还是我错在这里?
我对跨平台IPC的默认选择会有所提升,但是当我询问它时,我在两个不同的论坛上看到它受到批评,这让我很担心.也许这只是一个巧合,那么对于提升IPC和选择跨平台C++ IPC库的想法有何意义?
对于Windows dev,我们使用VC++ 2008作为参考.
编辑:这是我见过的评论示例(现在找不到它们):
对于提升,这是废话.至少在窗户上.互斥体不使用WinAPI,而是创建自己的基于文件的实现(WinAPI =内核对象).如果您的程序崩溃,则不会删除文件.下次启动Programm时,由于现有文件,无法创建互斥锁.
是否存在跨进程工作的读/写锁定机制(类似于Mutex,但是读/写而不是独占锁定)?我想允许并发读访问,但独占写访问.
我想制作一个小应用程序来更改 Windows 7 中的默认播放设备。唯一的解决方案是与声音小程序交互。我成功获取了包含设备名称的 SysListView32 窗口的句柄,但无法从 ListView 获取文本。
这是使用的代码:
IntPtr sListView = (window handle received from another function)
LVITEM lvi = new LVITEM();
lvi.mask = LVIF_TEXT;
lvi.cchTextMax = 1024;
lvi.iItem = 0; // i tried with a loop trought all the items
lvi.iSubItem = 0;
lvi.pszText = Marshal.AllocHGlobal(1024);
IntPtr ptrLvi = Marshal.AllocHGlobal(Marshal.SizeOf(lvi));
Marshal.StructureToPtr(lvi, ptrLvi, false);
SendMessage(sListView, (int)WinMesages.LVM_GETITEMW, IntPtr.Zero, ptrLvi);
string strLvi = Marshal.PtrToStringAuto(lvi.pszText);
Run Code Online (Sandbox Code Playgroud)
结果(strLvi)是一些中文字母。脚本中有什么问题?
更新: LVITEM 结构是这样的:
private struct LVITEM
{
public uint mask;
public int iItem;
public int …Run Code Online (Sandbox Code Playgroud) 我正在编写一个供多个APP使用的库项目.由于某种原因,我必须为不同的APP做一个函数互斥,所以我需要一个跨进程锁.但据我所知,在android中,APP只能在内部存储中写入自己文件的目录,外部存储不可靠,因为某些设备没有.所以文件锁似乎不适合我,所以有没有其他方法来实现跨进程锁?
谢谢〜
请帮忙,我如何组织流程 - 流程数据交换(在Windows中,如果重要)?
我process1.exe这就要求process2.exe有一些命令行参数.我想跟踪的"进步" process2从process1(比方说,一些int值).它(该int值)可以process1永久访问或每X毫秒 - 无关紧要.
将是有用的任何解决方案:WinApi或Qt.
谢谢大家!所有答案都非常有用!:) 非常感谢!!
c# ×2
c++ ×2
locking ×2
.net ×1
android ×1
boost ×1
dispose ×1
interaction ×1
ipc ×1
listviewitem ×1
marshalling ×1
mutex ×1
python ×1
semaphore ×1
sendmessage ×1
windows ×1