菜鸟提问:函数?线程?stdcall?(20分)

  • 主题发起人 主题发起人 enzhiyiqiu
  • 开始时间 开始时间
E

enzhiyiqiu

Unregistered / Unconfirmed
GUEST, unregistred user!
大富翁们请帮帮忙,菜鸟我快连生蛋的分都没了,20分意思一下了……
unit Unit12;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm12 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form12: TForm12;
implementation
{$R *.dfm}
function ThreadFunc(Info:Pointer):Integer;stdcall;
//??????这是函数吗?不需要声明?线程?
//??????stdcall的具体含义是什么?E文帮助我不能很理解:(
begin
……
end;
end.
 
stdcall是一种调用方式,多用于API中
 
to beer_xjx:那么调用stdcall具体能有什么好处呢或是效果,如果没有stdcall呢?
 
1,是函数,因为只在本unit使用,不提供其它unit使用,所以不声明;
2,参数是一个指针,函数名称是"线程函数"的意思,只是不知道到底是不是了;
3.stdcall主要功能是为了保证数据类型的兼容
 
不知道为什么,昨晚发贴不上了……
to webfool:菜鸟我贴上源程序给您看看。
另再问:这个函数是线程的执行过程吗?这里是不是用api来做线程呢?在这个代码中的如果没有stdcall在哪个位置可能出现数据的不兼容呢?stdcall好象还跟参数的顺序有关是吗?具体是怎么回事呢?后面的ExitThread(4)的参数是什么意思呢?菜鸟的问题好白痴呵,望各位大哥不耻笑我了……
unit Unit12;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm12 = class(TForm)
Button1:TButton;
Button2:TButton;
Edit1:TEdit;
procedure Button1Click(Sender:TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form12: TForm12;
CriticalSection:TRTLCriticalSection;
implementation
{$R *.dfm}
function ThreadFunc(Info:Pointer):Integer;stdcall;
var
Count:Integer;
begin
EnterCriticalSection(CriticalSection);
Form12.Button1.Enabled:=False;
for Count:=0 to 10000do
begin
Form12.Edit1.text:=IntToStr(Count);
end;
Form12.Edit1.text:='线程结束';
Sleep(1000);
Form12.Button1.Enabled:=True;
LeaveCriticalSection(CriticalSection);
ExitThread(4);
end;

procedure Tform12.Button1Click(Sender:TObject);
var
Thread1,Thread2:DWORD;
begin
InitializeCriticalSection(CriticalSection);
CreatThread(nil,0,@ThreadFunc,nil,0,Thread1);
CreatThread(nil,0,@ThreadFunc,nil,0,Thread2);
end;
end.

 
to netfool:
大哥真的不好意思,写的时候把名字写错了,菜鸟果然是菜鸟,自己先掌嘴了……
 
stdcall经常被用于dll中,可以使delphi编译的函数被其他的程序使用,如vb,vc等。否则就不可以
 
to kirinma:
谢谢,希望各位富翁都来帮帮忙啊,如果嫌分不够的话,等结贴的时候我可以倾家荡产的送给大家的,虽然不多,但表诚意啊……拜托了!
 
to enzhiyiqiu
不用客气,我来的目的也是学习,如果你的分数不够用就不必给我了
 
楼主兄弟,你这段代码我好象几星期前见过!
Stdcall能保证不同语言的兼容性!
参数顺序是从右到左!
exitthread()结束线程,里面的4应该无所谓吧!(我想是这样)
 
to mistjin前辈:
感谢!
这个程序是我从飞思科技编写的《Delphi下基于Windows核心编程》里看到的!
 
呵,我也买这本书了,飞思的书最垃圾了。简直就是骗钱。
 
这本书很多代码都是从老外的一个帮助文档上例码上抄的
连参数也不变!真是骗钱啊!不过这本书的书页质量好象 还不错!
 
多人接受答案了。
 
后退
顶部