- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我写了一个小类来同步 Linux(实际上是 Android)和 Windows 的线程。
这是我的界面的 Win32 实现:
class SyncObjectWin32 : public SyncObject
{
private:
const HANDLE m_hEvent;
public:
SyncObjectWin32()
: m_hEvent( ::CreateEvent( NULL, FALSE, FALSE ) )
{
if( NULL == m_hEvent )
throw core::Exception( "sys::SyncObjectWin32::SyncObjectWin32() - Failed to create event." );
}
~SyncObjectWin32()
{
::CloseHandle( m_hEvent );
}
void WaitForSignal()
{
::WaitForSingleObject( m_hEvent );
}
void Signal()
{
::SetEvent( m_hEvent );
}
};
问题是我不确定什么是 POSIX 等价物。到目前为止,我已经根据 this SO question 编写了以下类(class),但由于答案不完整,我不确定如何完成我的类(class):
class SyncObjectPosix
{
private:
pthread_mutex_t m_oMutex;
public:
SyncObjectPosix()
{
pthread_mutex_lock( m_oMutex ); // lock mutex
bool & signalled = find_signal( condition ); // find predicate
signalled = true; // set predicate
pthread_mutex_unlock( m_oMutex ); // unlock mutex
pthread_cond_signal( condition ); // signal condition variable
}
~SyncObjectPosix()
{
}
void WaitForSignal()
{
pthread_mutex_lock(mutex); // lock mutex
bool & signalled = find_signal( condition ); // find predicate
while (!signalled)
{
pthread_cond_timedwait(condition, m_oMutex, timeout);
}
signalled = false; // reset predicate
pthread_mutex_unlock( m_oMutex ); // unlock mutex
}
void Signal()
{
}
};
最佳答案
您描述的 POSIX 等效项是 POSIX 条件变量。请注意,条件变量必须始终与 POSIX 互斥量一起使用,但经常有多个条件变量使用相同的互斥量,因此如果您不打算专门为条件变量使用互斥量,则不应将其放在类。在您的情况下,Win32 和 POSIX API 之间的映射应该是:
CreateEvent
-> pthread_cond_init
CloseHandle
-> pthread_cond_destroy
WaitForSingleObject
-> pthread_cond_wait
或 pthread_cond_timedwait
SetEvent
-> pthread_cond_signal
或 pthread_cond_broadcast
幸运的是,有很多关于此的文档,但我推荐基本的 Programming POSIX Threads .
关于c - Linux/POSIX 等同于 Win32 的 CreateEvent、SetEvent、WaitForSingleObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52970757/
我正在研究 IO 重定向程序,并成功地为它创建了 poc。该程序生成子进程并使用命名管道与其通信。只要管道上有数据,我就使用 Event 对象来获取事件。默认情况下,我将事件设置为信号状态,但我不是第
我正在开发一个自动化项目,我试图单击网站上的按钮。我已设法识别该元素,但当我尝试使用 document.createEvent 时,它告诉我该对象不支持它。有什么想法吗? function categ
我正在尝试在 Web 应用程序中模拟按键,它适用于嵌入式系统,但它使用 Webkit 派生浏览器。我在 Chrome 中测试了代码并得到了同样的错误。 我尝试使用来自 Yahoo 的示例中的代码片段,
我有一个场景,我有一些文本,应该是用户可选择的。问题是,它上面有一个 UI 覆盖层,默认情况下会阻止选择文本。保留叠加层并仍然能够选择文本的合乎逻辑的方法是使用合成事件(使用 document.cre
以下代码失败(在 javascript 控制台中,以及通过浏览器扩展注入(inject)脚本时) document.createEvent('TestEvent') Firebug 吐出: [Exce
这个问题在这里已经有了答案: Not able to create event on Calendar with this script (2 个答案) 关闭 7 个月前。 我一直在编写代码,以便在
我有来自 here 的以下脚本: function download(filename, text) { var pom = document.createElement('a');
我正在使用找到的自定义输入事件@ http://whattheheadsaid.com/projects/input-special-event. . 问题是我无法获取该事件的 key 代码。有什么想
我有一个 process-1 尝试使用以下方式打开事件: LPCWSTR a = L"ShellReadyEvent"; HANDLE hEvent = OpenEvent ( EVENT_ALL_A
我在检查某人的代码时看到了这个: template class ConcurrentQueue { private: HANDLE dataPushEvent;
我很好奇在 Quake 中使用 CreateEvent() 函数。 我们在 WinMain() 定义的 c 文件中有以下全局变量: static HANDLE tevent; 在 WinMain()
如果我使用 CreateEvent 打开一个事件: responseWaitEvent = CreateEvent(NULL, // no security TRUE,
本文整理了Java中facebook4j.internal.json.z_F4JInternalFactory.createEvent()方法的一些代码示例,展示了z_F4JInternalFacto
这个问题已经有答案了: How to merge date and time as a datetime in Google Apps Spreadsheet script? (1 个回答) 已关闭
我们正在尝试使用 Google 表单创建一个在线表单来接受预约请求。这个过程应该是这样的: 用户填写表格并提交他们的信息(有效) 一封电子邮件被发送到我们的 Gmail 以通知我们有新的传入请求(这有
我正在编写一个 ant-cheat Win32 加载程序,我需要在其中创建一个事件,等待它收到我存储它的另一个进程的信号 - 但它因 ERROR_INVALID_HANDLE 而失败。我正在创建一个未
如果我在 Visual Studio 2005 中编译以下函数,我会遇到几个编译错误: void search() { deviceEventHandle = CreateEvent(NULL
我的 Windows 服务使用 CreateEvent 创建了 2 个事件,用于与用户应用程序通信。该服务和用户应用程序未在同一用户帐户下运行。用户应用程序打开事件并将其设置为无错误地发出信号。但是该
我试图模拟被拒绝的值并得到这个错误。奇怪的是,这种构造在“成功”的情况下有效addUser.mockImplementation(value => jest.fn().mockResolvedValu
我正在寻找 Mac OS X 上最简单或最合适的方法来简单地“发出信号”或通知一个进程。来自 Windows 背景,这可以使用类似以下的方法来实现。 进程A: // create named even
我是一名优秀的程序员,十分优秀!