社区
Delphi
帖子详情
需要创建一个线程执行一个函数,需要向函数中传递参数,需要线程执行完成后返回一个值,请给予帮助。
khkhing
2004-08-31 05:17:56
我对创建一个线程并没有多少了解,应该说不懂,希望大侠能够给出一个详细的范例最好。
由于某个函数的操作占资料及耗时长,整个界面都占着没有反应,所以想另创建一个线程去执行该函数。但,需要向函数中传递若干的数据,及函数有一个返回值给调用程序。
...全文
316
5
打赏
收藏
需要创建一个线程执行一个函数,需要向函数中传递参数,需要线程执行完成后返回一个值,请给予帮助。
我对创建一个线程并没有多少了解,应该说不懂,希望大侠能够给出一个详细的范例最好。 由于某个函数的操作占资料及耗时长,整个界面都占着没有反应,所以想另创建一个线程去执行该函数。但,需要向函数中传递若干的数据,及函数有一个返回值给调用程序。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
comanche
2004-09-01
打赏
举报
回复
从线程中返加值只能用事件, 或者是消息, 向线程中传递值可以结线程定义属性
TFooThread = class(TThread)
private
FProperty1: ValueType
FProperty2: ValueType
FResultProperty: ValuteType;
protected
procedrue Execute; override;
public
property Property1: ValueType read FProperty1 write FProperty1;
...
property ResultProperty: ValueType read FResultProperty;
end;
传递参数问题得到解决, 就是通过属性, 返回值实际上也是属性, 只不过发个通知给调用者, 可以用同步方法或消息, 好像很简单, 偶就不说了吧
khkhing
2004-09-01
打赏
举报
回复
像看了以上的范例,仍实施不到。
khkhing
2004-09-01
打赏
举报
回复
对于线程完成以后,及时回传结果如何处理?
beyondtkl
2004-08-31
打赏
举报
回复
1. 定义 你要传的数据类型 如果为内定类型则不需要了
比如
TEST_INFO = packed record
id: integer;
szName: array[0..10] of char;
sex: BYTE;
end;
PTEST_INFO = ^TEST_INFO;
2. 定义你的线程处理函数
function ThreadFunc(Para: Pointer):Integer;stdcall;
function ThreadFunc(Para: Pointer): Integer; // 注意是全局函数
var
t:PTEST_INFO;
begin
t := PTEST_INFO(Para); // 然后直接可以获取 其中的数据
// 下面是你的操作
end;
3. 创建线程
t.id := 10;
FillChar(t.szName, 10, 0);
t.szName := 'abcd';
t.sex := 0;
h1 := BeginThread(nil, 1024, @ThreadFunc, @t, 0, dwID);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
TerminateThread(h1, 0);
end;
这样写还是比较简单的,只是一个演示, 真正还要考虑很多 比如时间,资源等的访问
cdsgajxlp
2004-08-31
打赏
举报
回复
procedure TForm1.Button1Click(Sender: TObject); //主程序
var
mythread : threadxxs;
begin
mythread:=threadxxs.Create(database1,memo1);//参数
mythread.Resume;
end;
//线程
unit cmxgj;
interface
uses
Classes,Windows, Messages, SysUtils, Graphics, Controls, Forms, Dialogs,
StdCtrls ,Grids, DBGrids, Db, DBClient, MConnect, DBTables,DateUtils;
type
threadxxs = class(TThread)
private
memo1 : Tmemo;
database1 : Tdatabase;
{ Private declarations }
protected
procedure Execute; override;
procedure createtable;
procedure deletetable;
public
constructor Create(database : Tdatabase;memo : Tmemo);
end;
implementation
{ Important: Methods and properties of objects in visual components can only be
used in a method called using Synchronize, for example,
Synchronize(UpdateCaption);
and UpdateCaption could look like,
procedure threadxxs.UpdateCaption;
begin
Form1.Caption := 'Updated in a thread';
end; }
{ threadxxs }
constructor threadxxs.Create(database : Tdatabase;memo : Tmemo);
begin
memo1:=memo;
database1:=database;
FreeOnTerminate:= True;
inherited Create(False);
end;
procedure threadxxs.Execute;
begin
//...你的代码
end;
end.
尹成Python27天入门到项目实战
多
线程
实战多
线程
核心目标并发主
线程
与小弟
线程
多
线程
解决加速多
线程
的加速
线程
冲突基于类实现多
线程
基于类实现多
线程
的顺序与乱序互斥锁解决
线程
冲突死锁-使用锁要注意Rlock解决
一个
线程
反复加锁单
线程
死锁创建
线程
...
Qt
创建
一个
线程
执行
某个
函数
某个
函数
需要
用
线程
执行
时,
创建
一个
一次性的
线程
,在
线程
里面调用该
函数
。 头文件 class TaskThread : public QThread { Q_OBJECT public: TaskThread(QObject *parent = 0); ~TaskThread(); void ...
向
线程
传递参数
的两种基本方法
在传统的同步开发模式下,当我们调用
一个
函数
时,通过这个
函数
的参数将数据传入,并通过这个
函数
的
返回
值
来
返回
最终的计算结果。但在多
线程
的异步开发模式下,数据的传递和
返回
和同步开发模式有很大的区别。由于
线程
...
使用CreateThread
函数
创建
线程
线程
自己不拥有系统资源,只有运行所必须的一些数据结构,但它可以与同属于
一个
进程的其它
线程
共享进程所拥有的全部资源,同
一个
进程
中
的多个
线程
可以并发
执行
。 在C/C++
中
可以通过CreateThread
函数
在进程
中
创建...
c++
线程
函数
(类成员
函数
作为
线程
函数
使用)
回调
函数
是通过指针调用的
函数
,最常使用的回调
函数
就是在创建
线程
时,以
一个
函数
指针以及传递给这个
函数
多个参数来调用
线程
函数
来创建
线程
。那么一般的类成员
函数
是不能用作回调
函数
的,因为库
函数
在使用回调
函数
时...
Delphi
5,379
社区成员
262,722
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章