设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 4436|回复: 22
打印 上一主题 下一主题

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

[复制链接]

Lv1.梦旅人

梦石
0
星屑
167
在线时间
434 小时
注册时间
2009-1-1
帖子
643
跳转到指定楼层
1
发表于 2010-11-26 12:30:45 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
call了某个API后程序无响应,请教如何在call了5秒后中止并弹出“中止”的对话框

Lv1.梦旅人

梦石
0
星屑
110
在线时间
953 小时
注册时间
2007-4-25
帖子
805
23
发表于 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. }
复制代码
[email protected]:~> repeat 1 fortune
Matz is nice, so we are nice.
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
167
在线时间
434 小时
注册时间
2009-1-1
帖子
643
22
 楼主| 发表于 2010-11-29 13:37:01 | 只看该作者
回复 苏小脉 的帖子

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

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
110
在线时间
953 小时
注册时间
2007-4-25
帖子
805
21
发表于 2010-11-29 03:48:53 | 只看该作者
回复 赛露休斯 的帖子

……:L

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

使用道具 举报

Lv1.梦旅人

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

最近在研究XAS
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
110
在线时间
953 小时
注册时间
2007-4-25
帖子
805
19
发表于 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 代码,否则开头两行指定的链接器选项会有问题。
[email protected]:~> repeat 1 fortune
Matz is nice, so we are nice.
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
167
在线时间
434 小时
注册时间
2009-1-1
帖子
643
18
 楼主| 发表于 2010-11-28 14:51:43 | 只看该作者
本帖最后由 赛露休斯 于 2010-11-28 14:54 编辑

回复 苏小脉 的帖子

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

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
110
在线时间
953 小时
注册时间
2007-4-25
帖子
805
17
发表于 2010-11-28 14:02:23 | 只看该作者
回复 赛露休斯 的帖子

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

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
167
在线时间
434 小时
注册时间
2009-1-1
帖子
643
16
 楼主| 发表于 2010-11-28 13:42:17 | 只看该作者
回复 苏小脉 的帖子

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

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

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
110
在线时间
953 小时
注册时间
2007-4-25
帖子
805
15
发表于 2010-11-28 02:49:59 | 只看该作者
回复 赛露休斯 的帖子

代码都给你了,直接编译为 DLL 即可。
[email protected]:~> repeat 1 fortune
Matz is nice, so we are nice.
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-12-24 21:28

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表