查看: 2593|回复: 7

[已经解决] 请问API函数createthread怎么使用啊

[复制链接]
梦石
0
星屑
214
在线时间
66 小时
注册时间
2014-1-23
回帖
31
发表于 2019-9-28 23:05:18 | 显示全部楼层 |阅读模式

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

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

×
可以给个具体的例子吗
梦石
0
星屑
13562
在线时间
2753 小时
注册时间
2014-10-4
回帖
705

R考场第七期纪念奖

发表于 2019-9-28 23:50:17 | 显示全部楼层
本帖最后由 SixRC 于 2019-9-29 11:47 编辑

[pre lang="c"]#include <windows.h>
#include <stdio.h>
int __stdcall hi(int i) {
        Sleep(i * 80);
        printf("hi %d\n", i);
        return 0;
}

int main() {
        for (int i = 0; i < 10; i++) {
                CloseHandle(CreateThread(0, 0, (LPTHREAD_START_ROUTINE)hi, i, 0, 0));
        }
        Sleep(1000);
        getchar();
        return 0;
}[/pre]
感觉已经忘记怎么写代码了..
回复

使用道具 举报

梦石
0
星屑
214
在线时间
66 小时
注册时间
2014-1-23
回帖
31
 楼主| 发表于 2019-9-29 11:27:56 | 显示全部楼层
SixRC 发表于 2019-9-28 23:50
#include
#include
int hi(int i) {

那要是用ruby代码写呢
回复

使用道具 举报

梦石
0
星屑
13562
在线时间
2753 小时
注册时间
2014-10-4
回帖
705

R考场第七期纪念奖

发表于 2019-9-29 12:08:08 | 显示全部楼层

[pre lang="ruby"]u = Win32API.new("kernel32", "GetModuleHandleA", "p", "l").call("user32")
m = Win32API.new("kernel32", "GetProcAddress", "lp", "l").call(u, "MessageBoxA")
func = [0x8B, 0x4C, 0x24, 0x04,
        0x31, 0xC0, 0x50, 0x50, 0x51, 0x50, 0xB8].pack("C*") +
       [m].pack("l") +
       [0xFF, 0xD0, 0xC2, 0x04, 0x00].pack("C*")
=begin
  mov ecx, [esp+4] 参数 i.to_s
  xor eax,eax
  push eax
  push eax
  push ecx
  push eax
  mov eax,MessageBoxA
  call eax  0,text,0,0
  ret 4
=end
c = Win32API.new("kernel32", "CreateThread", "llppll", "v")
for i in 0...5
  c.call(0, 0, func, i.to_s, 0, 0)
end
loop{Graphics.update}
[/pre]
道理还是一样的
但是新线程的函数不能是ruby函数 因为机制不一样
得先编译好
汇编毕竟麻烦

评分

参与人数 2星屑 +100 赞 +1 收起 理由
VIPArcher + 100 认可答案
灰太狼与喜羊羊 + 1 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
214
在线时间
66 小时
注册时间
2014-1-23
回帖
31
 楼主| 发表于 2019-9-30 10:56:22 | 显示全部楼层
SixRC 发表于 2019-9-29 12:08
u = Win32API.new("kernel32", "GetModuleHandleA", "p", "l").call("user32")
m = Win32API.new("kernel ...

那这么说 想要在ruby中用好api函数 还得多少掌握一些汇编语言吗

点评

学汇编或者说计算机底层机制只是你搞懂这些的一个途径 多涉猎吧  发表于 2019-9-30 13:51
你要用好api 关键是理解api的过程流程 和什么语言无关 你搞懂了一百种方式你都能用  发表于 2019-9-30 13:47
没必要啊 有需要你外接自己写的dll就行了  发表于 2019-9-30 13:45
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部