CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

怎么向createthread或begincreate传递函数的参数值?

楼主dedema(思想恐龙)2002-05-25 09:44:49 在 Delphi / VCL组件开发及应用 提问

用createthread或begincreate可以开始一个线程!其中第三个参数是线程函数,第四个参数是向这个线  
   
  程函数传递的参数的指针!我用它传递时并不起作用的!  
  谁能给我一个例子,即用createthread呀begincreate制造一个线程的同时,就给线程函数传递参数!  
  问题点数:20、回复次数:5Top

1 楼sleeepboy(阿闲)回复于 2002-05-25 09:55:11 得分 5

procedure   asdfa;  
  begin  
   
  end;  
   
  tid:   Cardinal;  
  BeginThread(nil,   0,   @asdfa,   nil,   0,   tid);就ok了   用不着CreateThread  
   
  另外   为什么不用Delphi封装的TThread呢   多方便   还比较容易控制同步问题Top

2 楼yansea(思宏)回复于 2002-05-25 09:56:00 得分 15

const  
      Margin   =   20;  
   
  type  
      PData   =   ^TData;  
      TData   =   record  
          XPos:   Integer;  
          YPos:   Integer;  
      end;  
  ______________________________________________________  
  function   ThreadFunc(Ptr:   Pointer):   LongInt;   stdcall;  
  var  
      i,   j:   Integer;  
      P:   TColorRef;  
      DC:   HDC;  
      Data:   PData;  
  begin  
      Data   :=   PData(Ptr);  
      DC   :=   GetDC(Form1.Handle);  
      for   j   :=   0   to   AHeight   do  
          for   i   :=   Margin   to   AWidth   +   Margin   do   begin  
              P   :=   GetPixel(DC,   i,   j);  
              SetPixel(DC,   i   +   Data^.Xpos,   Data^.YPos   +   j,   P);  
          end;  
      ReleaseDC(Form1.Handle,   DC);  
      Dispose(Data);  
  end;  
  ____________________________________________________  
   
  procedure   TForm1.StartMenu(Sender:   TObject);  
  var  
      hThread1,   hThread2,   hThread3:   THandle;  
      ThreadID:   DWORD;  
      Data:   PData;  
  begin  
      New(Data);  
      Data^.xPos   :=   AWidth;  
      Data^.YPos   :=   0;  
      hThread1   :=   CreateThread(nil,   0,   @ThreadFunc,  
                                                        Data,   0,   ThreadID);  
   
      New(Data);  
      Data^.xPos   :=   0;  
      Data^.YPos   :=   AHeight;  
      hThread2   :=   CreateThread(nil,   0,   @ThreadFunc,  
                                                        Data,   0,   ThreadID);  
   
      New(Data);  
      Data^.xPos   :=   AWidth;  
      Data^.YPos   :=   AHeight;  
      hThread3   :=   CreateThread(nil,   0,   @ThreadFunc,  
                                                        Data,   0,   ThreadID);  
   
      if   ((hTHread1   =   0)   or   (hThread2   =   0)   or   (hThread3   =   0))   then  
          MessageBox(Handle,   'No   Thread!',   nil,   mb_Ok);  
  end;  
   
  我把关键的地方贴出来了,你看看吧Top

3 楼chenzhenjian()回复于 2002-05-26 11:47:00 得分 0

原来是我的stdcall关键字没有写的!Top

4 楼iivv(让delphi去死!只要我还活着~~~)回复于 2002-05-26 12:28:17 得分 0

用Delphi封装的TThread有时候碰到一些麻烦,,,觉得还没直接调用API好,比那个灵活多了Top

5 楼dedema(思想恐龙)回复于 2002-05-29 23:02:34 得分 0

对不起。。。  
  我结了几次帐都有问题!  
  我再试试看!Top

相关问题

  • 问一个createThread函数的线程函数参数如何传递的问题。
  • 请问创建线程函数CreateThread的参数如何传递
  • 向函数传递数组
  • 函数传递问题?
  • 传递函数做参数
  • 怎样在函数中传递数组?
  • 请教一个函数传递问题
  • 函数的参数传递数值!?
  • 函数的参数传递问题
  • 关于.net的函数传递???

关键词

  • 函数
  • 线程
  • dc
  • begincreate
  • 参数
  • createthread
  • xpos
  • pdata
  • hthread
  • ypos

得分解答快速导航

  • 帖主:dedema
  • sleeepboy
  • yansea

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo