查看: 5369|回复: 22

[已经解决] 请教如何中止一个执行中的API

[复制链接]
梦石
0
星屑
167
在线时间
434 小时
注册时间
2009-1-1
回帖
557
发表于 2010-11-26 12:30:45 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
call了某个API后程序无响应,请教如何在call了5秒后中止并弹出“中止”的对话框
梦石
0
星屑
310
在线时间
953 小时
注册时间
2007-4-25
回帖
798
发表于 2010-11-29 14:42:40 | 显示全部楼层
回复 赛露休斯 的帖子

强调一下,这是 C 不是 C++。Ruby 调用的拿到 C 里写的更少:
  1. DWORD WINAPI thread_proc(void* param) {
  2.         return WAIT_FAILED != WaitForSingleObject(CreateEvent(NULL, 0, 0, NULL), INFINITE);
  3. }
复制代码
su@rpg.blue:~> repeat 1 fortune
Matz is nice, so we are nice.
回复

使用道具 举报

梦石
0
星屑
167
在线时间
434 小时
注册时间
2009-1-1
回帖
557
 楼主| 发表于 2010-11-29 13:37:01 | 显示全部楼层
回复 苏小脉 的帖子

C++的代码完全看不懂,能不能举个例子,比如这帖5楼的代码
http://rpg.blue/thread-162156-1-3.html
它是在RUBY中调用的,怎么放进thread_proc函数?
最近在研究XAS
回复

使用道具 举报

梦石
0
星屑
310
在线时间
953 小时
注册时间
2007-4-25
回帖
798
发表于 2010-11-29 03:48:53 | 显示全部楼层
回复 赛露休斯 的帖子

……:L

DLL 的 thread_proc 函数里是放“那个会卡机的 API”的地方,我给你的例子代码是一个例子,你不改它就会一直循环弹对话框。Ruby 部分做的是计时,在 5 秒后停止无限弹对话框的线程。
su@rpg.blue:~> repeat 1 fortune
Matz is nice, so we are nice.
回复

使用道具 举报

梦石
0
星屑
167
在线时间
434 小时
注册时间
2009-1-1
回帖
557
 楼主| 发表于 2010-11-29 03:14:41 | 显示全部楼层
dll创建成功了,然后测试的时候我把RUBY部分的 sleep 5 换成那个会卡机的API,不知道这样用对不对,它一遍又一遍的弹出"Loop loop and loop ...",没有下文了,未见中止。
另外我这个API在不同环境下可能有无法运行卡死的情况,所以我想如果该API在3秒内没有执行完毕则中止这个API,然后继续执行后面的代码。

最近在研究XAS
回复

使用道具 举报

梦石
0
星屑
310
在线时间
953 小时
注册时间
2007-4-25
回帖
798
发表于 2010-11-28 16:02:34 | 显示全部楼层
本帖最后由 苏小脉 于 2010-11-28 16:05 编辑

回复 赛露休斯 的帖子

把 HANDLE WINAPI abort_async_api() 改为 void WINAPI abort_async_api()

这是我写错了,不过由于是编译为 C 代码所以没发现

顺便改一下这个:工程右键属性 - C/C++ - 高级 - 编译为 - C 代码,否则开头两行指定的链接器选项会有问题。
su@rpg.blue:~> repeat 1 fortune
Matz is nice, so we are nice.
回复

使用道具 举报

梦石
0
星屑
167
在线时间
434 小时
注册时间
2009-1-1
回帖
557
 楼主| 发表于 2010-11-28 14:51:43 | 显示全部楼层
本帖最后由 赛露休斯 于 2010-11-28 14:54 编辑

回复 苏小脉 的帖子

设置了字符集以后运行出现另一个错误
error C4716: “abort_async_api”: 必须返回一个值
是在第16行发生的
最近在研究XAS
回复

使用道具 举报

梦石
0
星屑
310
在线时间
953 小时
注册时间
2007-4-25
回帖
798
发表于 2010-11-28 14:02:23 | 显示全部楼层
回复 赛露休斯 的帖子

工程上右键 - 属性 - 配置属性 - 通用 - 字符集 - 设置为不使用字符集。
要么就把所有双引号字符串加上 TEXT(),如  TEXT("Loop loop and loop ...")
su@rpg.blue:~> repeat 1 fortune
Matz is nice, so we are nice.
回复

使用道具 举报

梦石
0
星屑
167
在线时间
434 小时
注册时间
2009-1-1
回帖
557
 楼主| 发表于 2010-11-28 13:42:17 | 显示全部楼层
回复 苏小脉 的帖子

不会编译 DLL 呢
我是选择了一个空项目的win32dll项目,然后直接添加一个cpp把代码放进去编译,结果。。。
error C2664: “MessageBoxW”: 不能将参数 2 从“const char [23]”转换为“LPCWSTR”
与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换

一窍不通,完全不知道该怎么弄呢
最近在研究XAS
回复

使用道具 举报

梦石
0
星屑
310
在线时间
953 小时
注册时间
2007-4-25
回帖
798
发表于 2010-11-28 02:49:59 | 显示全部楼层
回复 赛露休斯 的帖子

代码都给你了,直接编译为 DLL 即可。
su@rpg.blue:~> repeat 1 fortune
Matz is nice, so we are nice.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部