赞 | 0 |
VIP | 2 |
好人卡 | 27 |
积分 | 1 |
经验 | 26327 |
最后登录 | 2019-10-13 |
在线时间 | 953 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 110
- 在线时间
- 953 小时
- 注册时间
- 2007-4-25
- 帖子
- 805
|
一个例子:- #pragma comment(linker, "/EXPORT:start_async_api=_start_async_api@0")
- #pragma comment(linker, "/EXPORT:abort_async_api=_abort_async_api@0")
- #include <Windows.h>
- static HANDLE hdl_thread;
- DWORD WINAPI thread_proc(void* param);
- void WINAPI start_async_api() {
- hdl_thread = CreateThread(NULL, 0, thread_proc, 0, 0, NULL);
- }
- HANDLE WINAPI abort_async_api() {
- TerminateThread(hdl_thread, 0);
- }
- DWORD WINAPI thread_proc(void* param) {
- for (;;) MessageBox(NULL, "Loop loop and loop ...", "Infinity Inc.", MB_OK);
- }
复制代码 这里的 #pragma 指令是针对 MSVC 编译器写的,所以只能用 MSVC 编译;名称修饰是针对 C 的,所以不能生成按 C++ 生成代码;这些都是小节。
在 thread_proc 函数里可以去调用需要调用、耗时的 API,它会在一个独立的内核线程中运行。这里是一个无限弹出消息框的过程。
在 Ruby 中:
- start_async_api = Win32API.new('GeneralDllApp', 'start_async_api', 'v', 'v')
- abort_async_api = Win32API.new('GeneralDllApp', 'abort_async_api', 'v', 'v')
- start_async_api.call
- sleep 5
- abort_async_api.call
复制代码 一开始调用 start_async_api,创建线程并调用耗时 API,反复弹出消息框(当然,这里的弹出是同步的,下一个消息框弹出前会等待前一个消息框的销毁),但持续五秒后 Ruby 所在的线程调用 abort_async_api,终止了线程,于是不再弹出消息框。 |
评分
-
查看全部评分
|