stm32怎么获取handle

stm32怎么获取handle,第1张

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里面的数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9272032.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存