建立线程成功后,但不能在线程里面处理 界面控件数据

w20011025 2010-08-30 04:30:16
DWORD WINAPI GetData(void *x);//数据接受

hWanderP = CreateThread (NULL, //建立线程
0,
GetData,
NULL,
CREATE_SUSPENDED,
(LPDWORD)&dwWander);
SetThreadPriority (hWanderP, THREAD_PRIORITY_NORMAL );
ResumeThread (hWanderP);

建立线程成功后,但不能在线程里面处理 界面控件数据?
如:在线程里面更改文本控件数据 编译时显示未定义?
用sendMessage 处理截面消息吗?
...全文
97 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
guobin190 2010-08-31
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jerrywjh 的回复:]
线程里不要直接处理任何与界面有关的操作,所有界面操作都放在主线程中,否则一般都会出问题。这是一个多线程设计的基本原则 。 线程里面有数据,可以自定义消息,把数据放在消息的lparam 参数中,发回主线程来处理。
[/Quote]
up!一般就是这样做的!

当然在线程中处理也是可以的 需要给线程函数GetData传一个this指针,然后再做处理。
tubo_true 2010-08-31
  • 打赏
  • 举报
回复
得到主界面的指针,调用方法即可
skyfree 2010-08-31
  • 打赏
  • 举报
回复
线程里不要直接处理任何与界面有关的操作,所有界面操作都放在主线程中,否则一般都会出问题。这是一个多线程设计的基本原则 。 线程里面有数据,可以自定义消息,把数据放在消息的lparam 参数中,发回主线程来处理。
w20011025 2010-08-31
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sidyhe 的回复:]
线程函数是静态static
无法直接操作控件,需要传递一个指针,有了指针就可以操作了
DWORD WINAPI GetData(void *x);
可以GetData(GetItemDlg(IDC_EDIT));//传递个指针然后在流程里操作
[/Quote]还是感谢下。
Sidyhe 2010-08-31
  • 打赏
  • 举报
回复
GetData((LPVOID)GetItemDlg(IDC_EDIT));
Sidyhe 2010-08-31
  • 打赏
  • 举报
回复
线程函数是静态static
无法直接操作控件,需要传递一个指针,有了指针就可以操作了
DWORD WINAPI GetData(void *x);
可以GetData(GetItemDlg(IDC_EDIT));//传递个指针然后在流程里操作
w20011025 2010-08-30
  • 打赏
  • 举报
回复
在线程里面有数据的时候 刷新两个界面吗?同时处理数据呢?
skyfree 2010-08-30
  • 打赏
  • 举报
回复
同意楼上2位的做法, 有时候需要线程处理函数传递一个包含界面句柄和其他参数的一个struct.总之,基本原则是往回发消息。
  • 打赏
  • 举报
回复
将界面的句柄传到线程处理函数 通过消息来更新界面
wltg2001 2010-08-30
  • 打赏
  • 举报
回复
一般的方法是向界面线程发送自定义消息,让界面线程在响应消息时自己更新。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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