systick就是指那个系统滴答么 配置开启系统滴答就会自行运行 systick是一个中断,有对应的中断的向量 你需要什么功能就在中断里做,或者设置标志位,中断触发标志位 主循环里检测标志位进行 *** 作
废话不多说上代码:
HANDLE ha = CreateEvent(NULL,TRUE,TRUE,NULL);
DWORD dw = WaitForSingleObject(ha,0);
if (dw==WAIT_TIMEOUT)
{
//没有触发
printf("");
}
else if (dw==WAIT_OBJECT_0 )
{
//已经触发
printf("");
}
解释:
WaitForSingleObject()函数有查询作用。第二个参数为0即,等待时间为0,当查询结果后立即返回。
通信结果可以用Message去封装,msg可以包含what arg1 arg2 obj最多四种参数,obj是你需要用的,把obj附带上你的数据,貌似obj需要实现序列化接口,
然后异步线程可以调用主线程的handler发送消息msg,给handlemessage处理
如果你说的异步线程是AsynTask 那他本身就实现了上面的机制,他内部有方法,调用publishProgress(value);会把values传给onProgressUpdate(String values)处理(假设你的数据是String就写String,AsynTask<>,尖括号里面相应参数也填String)
在重写onProgressUpdate里调用service的一个方法
调不了service对象就需要在构造方法里传进来一个service对象
如果只需要一个最终结果,就在onPostExecute(Result或你喜欢的类型)方法里调用service处理这个result,,并且需要在doinBackGround你return这个结果
用jni方式,先用c\c++做个调用windows句柄的程序,编译成dll,然后用java通过jni方式调用它,给他传值,让c\c++程序调用。
有这方面相关的demo的吗?或者说这方面的dll
你的标题有点怪(HWND就是窗口句柄呀,还转换什么呀),还好通过对问题的描述知道你想要应用程序的HANDLE
// 得到窗口句柄
HWDN parenthwnd = ::FindWindowEx(NULL, parenthwnd, "#32770", NULL);
// 得到此窗口的主线程ID
DWORD dwThreadId = ::GetWindowThreadProcessId(parenthwnd, 0);
// 得到当前进程的句柄
HANDLE hApp = GetModuleHandle(NULL); // 参数NULL表示获取当前调用函数的进程句柄,你也可以通过完整路径的可执行文件名/DLL,来获取当前加载在当前进程地址空间的其他模块句柄
对补充问题回答:那是不可能的,目前你只能通过GetModuleHandle来获取进程句柄。
补充回答:OpenProcess是新打开一个进程的时候获取其句柄,GetModuleHandle是用来获取已经加载调用进程地址空间的模块句柄。参数NULL表示当前进程句柄(也就是说即使你在DLL里面用了这个函数,若传入的参数为NULL,则返回的并不是DLL的句柄,而是调用DLL的进程句柄),如果要获取进程地址空间中的其他模块句柄,则需要传入模块的名字此名字可以带全路径(注意路径要用反斜杠表示'\\',当然只写文件名最好如:
#include<windowsh>
#include<iostream>
using namespace std;
void main()
{
HANDLE handle;
char pNotFound = {"the module not found!"};
cout << "In the calling process address sapce:\n"; // 显示在调用进程地址空间中加载的模块句柄
cout << "the handle of the calling process is: ";
if(handle = GetModuleHandle(NULL))cout << handle <<endl;// 调用进程句柄
else cout << pNotFound << endl;
cout << "the handle of the kernel32dll is: ";// kernel32dll模块
if(handle = GetModuleHandle(L"kernel32"))cout << handle << endl; // 参数不带扩展名,会被默认为DLL
else cout << pNotFound << endl;
cout << "the handle of the ntdlldll is: "; // netdlldll模块
if(handle = GetModuleHandle(L"c:\\windows\\system32\\ntdlldll"))cout << handle << endl; // 以带全路径文件名的方式传入参数
else cout << pNotFound << endl;
cout << "the handle of the xxxdll is: "; // xxxdll模块不存在
if(handle = GetModuleHandle(L"xxxdll"))cout << handle << endl;
else cout << pNotFound << endl;
}
你拿去运行一下吧,不明白再hi我
以上就是关于stm32怎么获取handle全部的内容,包括:stm32怎么获取handle、如何从CreateEvent得到的HANDLE来获取Event的信号状态、如何获取handlemessage里面的数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)