子线程传变量给主线程的问题

shunshunjoe 2014-08-07 09:10:54
子线程有三个变量a,b,c,怎么传给主线程form1然后同时动态加载到Listview,然后主线程能正常运作,不假死?最好能有集体代码示咧,谢谢啊
...全文
292 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lhy 2014-08-08
  • 打赏
  • 举报
回复
引用 6 楼 nm_wyh 的回复:
为什么不考虑反过来呢, 在创建线程时将主窗体的ListView对象传递到子线程中,子线程中怎么操作都可以,主线程界面都不用刷新,实时显示。
同步问题呢?
nm_wyh 2014-08-08
  • 打赏
  • 举报
回复
在线程单元中任意地方都可以操作MainListView对象
nm_wyh 2014-08-08
  • 打赏
  • 举报
回复
引用 7 楼 shunshunjoe 的回复:
[quote=引用 6 楼 nm_wyh 的回复:] 为什么不考虑反过来呢, 在创建线程时将主窗体的ListView对象传递到子线程中,子线程中怎么操作都可以,主线程界面都不用刷新,实时显示。
怎么传对象到子线程,具体代码怎么实现?谢谢[/quote] 重写线程的构造函数和析构函数(构造函数中可以任意数量的参数) constructor Create(aList: TListView); Destructor Destroy; override; 在线程单元中定义一个公共LIstView对象, MainListView:TListView; 在重写的构造函数中 //线程构函数函数---------------------------------------------------------------- constructor TDemoThread.Create(aList: TListView); begin MainListView:= aList; FreeOnTerminate:=true; //标志着线程执行完毕后,自动释放资源 inherited Create(true); //线程创建时不执行,指定运行后方才执行,如果设为False,则一创建就运行 end; //析构函数 //线程析构函数------------------------------------------------------------------ destructor TDemoThread.Destroy; begin MainListView := nil; inherited; end;
nm_wyh 2014-08-07
  • 打赏
  • 举报
回复
为什么不考虑反过来呢, 在创建线程时将主窗体的ListView对象传递到子线程中,子线程中怎么操作都可以,主线程界面都不用刷新,实时显示。
lhy 2014-08-07
  • 打赏
  • 举报
回复
发消息就可以了,32位系统可以传两个数据,总共64位。如果不够多定义几个消息。
shunshunjoe 2014-08-07
  • 打赏
  • 举报
回复
引用 3 楼 ksrsoft 的回复:
sendmessage发消息,主窗体的句柄,值就是了
SendMessage(h1,WM_SETTEXT,255,Integer(PChar(ip)));线程里这么发送,主线程里怎么接收呢?
缘中人 2014-08-07
  • 打赏
  • 举报
回复
sendmessage发消息,主窗体的句柄,值就是了
shunshunjoe 2014-08-07
  • 打赏
  • 举报
回复
引用 1 楼 m617105 的回复:
如果a,b,c是常规变量,例如boolen,int等的话,直接使用PostMessage将变量传递给主线程。 如果你的变量是string或是线程内申请的临时内存,最好能在主线程中申请一结构体(注意这个结构体的生命周期)来承载着三个变量,然后在使用PostMessage来通知主线程,结构体已经变化。
有没有具体一点的代码,我网上查好像sendmessage好一点,就是不会用。
浩南_哥 2014-08-07
  • 打赏
  • 举报
回复
如果a,b,c是常规变量,例如boolen,int等的话,直接使用PostMessage将变量传递给主线程。 如果你的变量是string或是线程内申请的临时内存,最好能在主线程中申请一结构体(注意这个结构体的生命周期)来承载着三个变量,然后在使用PostMessage来通知主线程,结构体已经变化。
ttbook001 2014-08-07
  • 打赏
  • 举报
回复
引用 4 楼 shunshunjoe 的回复:
[quote=引用 3 楼 ksrsoft 的回复:] sendmessage发消息,主窗体的句柄,值就是了
SendMessage(h1,WM_SETTEXT,255,Integer(PChar(ip)));线程里这么发送,主线程里怎么接收呢?[/quote] 界面上写处理WM_SETTEXT的方法就可以接收处理了。
shunshunjoe 2014-08-07
  • 打赏
  • 举报
回复
引用 6 楼 nm_wyh 的回复:
为什么不考虑反过来呢, 在创建线程时将主窗体的ListView对象传递到子线程中,子线程中怎么操作都可以,主线程界面都不用刷新,实时显示。
怎么传对象到子线程,具体代码怎么实现?谢谢

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧