MFC开辟多线程为什么要关闭线程?

handanwxd 2011-07-05 04:18:25
在线程里处理完运算后为什么还要关闭这个线程,不关闭行不行?如果关闭怎么关闭?
...全文
458 25 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
cultsharp 2011-07-08
  • 打赏
  • 举报
回复
如ID为IDD_SCOMMTEST_DIALOG对话框标题为"ceshi"
HWND hWnd = FindWindow(NULL,"ceshi");
cultsharp 2011-07-08
  • 打赏
  • 举报
回复
HWND hWnd = FindWindow(NULL,"IDD_SCOMMTEST_DIALOG");

一般用这个ID(IDD_SCOMMTEST_DIALOG)对应对话框的名字
handanwxd 2011-07-07
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 sichuanpb 的回复:]
这个真的不需要关闭,只执行一次而已。
另外,这个根本不需要线程方式。
再看看 HWND hWnd = FindWindow(NULL,"IDD_SCOMMTEST_DIALOG");应该有问题。
[/Quote]
我知道不需要线程,我在学习线程而已,
HWND hWnd = FindWindow(NULL,"IDD_SCOMMTEST_DIALOG");
这句问题好郁闷
hjfjoy 2011-07-06
  • 打赏
  • 举报
回复
线程会占用内存资源,会占用CPU,如果不停的创建但是不关闭线程,后果可想而知。。
sichuanwww 2011-07-06
  • 打赏
  • 举报
回复
这个真的不需要关闭,只执行一次而已。
另外,这个根本不需要线程方式。
再看看 HWND hWnd = FindWindow(NULL,"IDD_SCOMMTEST_DIALOG");应该有问题。
handanwxd 2011-07-06
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 zyc285230318 的回复:]
发详细代码 看看
[/Quote]
//主类头文件代码:(窗口类)
UINT ThreadFunc(LPVOID lpParam); //声明线程
class CSCommTestDlg : public CDialog
{
public:
float bomei(CString str);
CString Bomeichange(CString str,CString str1);
ConvertHexChar(char ch);
String2Hex(CString str, CByteArray &senddata);
CSCommTestDlg(CWnd* pParent = NULL);
CWinThread* pThread; //定义指针对象

//以下为主类中程序
***************************
***************************
pThread=AfxBeginThread(ThreadFunc,NULL,0,0,0,NULL); //启动线程
***************************
***************************
UINT ThreadFunc(LPVOID lpParam) //线程函数
{
HWND hWnd = FindWindow(NULL,"IDD_SCOMMTEST_DIALOG");
char cishu[40],baifenbi1[40],bomeidu1[40],wendu1[40],shijian1[80];
if(m_boolth1 ==1)
{
GetDlgItemText(hWnd,IDC_WENDU,wendu1,40);
GetDlgItemText(hWnd,IDC_BOMEIDU,bomeidu1,40);
GetDlgItemText(hWnd,IDC_BAIFENBI,baifenbi1,40);
GetDlgItemText(hWnd,IDC_NOWTIME,shijian1,80);
}
return 0;
}
////////////////////////////////////////////////////
各位帮忙,能追加分不,追加40分
LiuYinChina 2011-07-06
  • 打赏
  • 举报
回复
因为你的这个线程不是界面线程,这个线程里没有 HWND 的映射(说来复杂)。
你是不是直接用的 CreateThread 或者 _beginthreadex, 你应该用 CWinThread 启动UINT ThreadFunc(LPVOID lpParam),应该就可以了。
另外,一般不这么用,界面的东西都放在主界面线程,你这么做,后面如果有什么问题,可能比较难调试。
shiyunqiang 2011-07-06
  • 打赏
  • 举报
回复
不关闭当然不行了,会消耗资源的。
clown 2011-07-06
  • 打赏
  • 举报
回复
发详细代码 看看
lflljt 2011-07-06
  • 打赏
  • 举报
回复
CWnd::UpdateData()
na2650945 2011-07-06
  • 打赏
  • 举报
回复
[Quote=引用楼主 handanwxd 的回复:]
在线程里处理完运算后为什么还要关闭这个线程,不关闭行不行?如果关闭怎么关闭?
[/Quote]
关闭的是句柄吧。
进程运行结束会自动清理的。
handanwxd 2011-07-06
  • 打赏
  • 举报
回复
根据各位的建议我看了看,hWnd的值是0x00000000,这个算是无效吧,怎么解决呢?
另外我在线程里加了“UpdateData();”提示“UpdateData();”未定义。
这些问题是不是线程内部函数应该和外部有某种设置或者连接什么的吧
handanwxd 2011-07-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 luciferisnotsatan 的回复:]
GetDlgItemText调用成功了么?失败的话,getlasterror看看什么错
[/Quote]
调用成功,但就是空值
Allen_zhang 2011-07-05
  • 打赏
  • 举报
回复
1、你确定HWND hWnd = FindWindow( NULL , "IDD_SCOMMTEST_DIALOG " ); //获得窗口句柄
这个获取的句柄有效?

2、这么简单的东西不用放到线程中吧?

3、你控件填入信息的时候有调用了updatedata了吗?如果还没有线程就这样调用的话是没有d
sjy88813 2011-07-05
  • 打赏
  • 举报
回复
你那个FindWindow中,后面的要填窗口的名字,就是窗口的标题,你的"IDD_SCOMMTEST_DIALOG "怎么感觉后面有个空格??
UpdateData();
GetDlgItemText(hWnd,IDC_WENDU,wendu,40);
GetDlgItemText(hWnd,IDC_BOMEIDU,bomeidu,40);
GetDlgItemText(hWnd,IDC_BAIFENBI,baifenbi,40);
GetDlgItemText(hWnd,IDC_NOWTIME,shijian,80);
wltg2001 2011-07-05
  • 打赏
  • 举报
回复
你确定HWND hWnd = FindWindow( NULL , "IDD_SCOMMTEST_DIALOG " ); 这个句柄是有效的吗?
luciferisnotsatan 2011-07-05
  • 打赏
  • 举报
回复
GetDlgItemText调用成功了么?失败的话,getlasterror看看什么错
forwin 2011-07-05
  • 打赏
  • 举报
回复
看下什么时候调用ThreadFunc
是否在调用前已经赋值
nightkids_008 2011-07-05
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 handanwxd 的回复:]
哦,原来如此,大家看一下我的代码:
////////////////////////////////////////////////////////////////////////
UINT ThreadFunc(LPVOID lpParam)
{
HWND hWnd = FindWindow( NULL , "IDD_SCOMMTEST_DIALOG " ); //获得窗口句柄
……
[/Quote]
将变量和控件关联。。然后UPDATADATE
handanwxd 2011-07-05
  • 打赏
  • 举报
回复
哦,原来如此,大家看一下我的代码:
////////////////////////////////////////////////////////////////////////
UINT ThreadFunc(LPVOID lpParam)
{
HWND hWnd = FindWindow( NULL , "IDD_SCOMMTEST_DIALOG " ); //获得窗口句柄
char cishu[40],baifenbi[40],bomeidu[40],wendu[40],shijian[80];

if(m_boolth1==1) //m_boolth1为全局变量
{
GetDlgItemText(hWnd,IDC_WENDU,wendu,40);
GetDlgItemText(hWnd,IDC_BOMEIDU,bomeidu,40);
GetDlgItemText(hWnd,IDC_BAIFENBI,baifenbi,40);
GetDlgItemText(hWnd,IDC_NOWTIME,shijian,80);
}
return 0;
}
//其中,IDC_WENDU,IDC_BOMEIDU,IDC_BAIFENBI,IDC_NOWTIME为窗口上的四个EDIT控件
///////////////////////////////////////////////////////////
结果是我不能读取这四个控件里的字符,单步调试每个数组得到的都是"",空字符,控件里确实有东西,求解什么地方不对
加载更多回复(5)

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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