sdqdydj
驱动牛犊
驱动牛犊
  • 注册日期2005-03-12
  • 最后登录2005-12-07
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1700回复:10

求救:CreateThread就直接关闭应用程序

楼主#
更多 发布于:2005-03-31 08:32
我的语句如下:
void CMonitorDlg::OnButton1()
{
DWORD pcThreadID=0;
m_hThread=CreateThread(NULL,0,LonRead,LPVOID(this),0,&pcThreadID);
if(m_hThread)
{
//不能创建线程
MessageBox (_T(\"Unable to create the read thread\"));
DWORD dwError = GetLastError ();
}
}
头文件里声明如下:
protected:
    static DWORD WINAPI LonRead(LPVOID lpvoid);  
    DWORD LonRead (void);

只要点击button1,程序立刻关闭,如果在createthread前加“::”则系统提示:Assertion Failed!  Wincore.cpp Line 1047
worldcup
驱动小牛
驱动小牛
  • 注册日期2004-08-19
  • 最后登录2006-10-19
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-03-31 09:06
protected:
static DWORD WINAPI LonRead(LPVOID lpvoid);
DWORD LonRead (void);

总感觉挺别扭!查查CreateThread的例子吧

makefriend8
驱动小牛
驱动小牛
  • 注册日期2003-08-01
  • 最后登录2014-06-27
  • 粉丝0
  • 关注0
  • 积分84分
  • 威望111点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-03-31 11:42
说的详细点。。环境,,开发工具。
驱动程序,还是应用程序。。。。。
maqian
驱动中牛
驱动中牛
  • 注册日期2002-08-07
  • 最后登录2014-09-16
  • 粉丝2
  • 关注1
  • 积分12分
  • 威望120点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-03-31 16:57
说的详细点。。环境,,开发工具。
驱动程序,还是应用程序。。。。。
 

\"void CMonitorDlg::OnButton1() \",
肯定是MFC或ATL\\WTL应用程序了.

[编辑 -  3/31/05 by  maqian]
五花马,千金裘,呼儿将出换美酒。 我不喝酒,喝可乐。
maqian
驱动中牛
驱动中牛
  • 注册日期2002-08-07
  • 最后登录2014-09-16
  • 粉丝2
  • 关注1
  • 积分12分
  • 威望120点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-03-31 17:00
sdqdydj:你不把LonRead贴出来,让人怎么帮你?
五花马,千金裘,呼儿将出换美酒。 我不喝酒,喝可乐。
sdqdydj
驱动牛犊
驱动牛犊
  • 注册日期2005-03-12
  • 最后登录2005-12-07
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-03-31 20:02
Cnewdilog g_aircon;
//LonRead是在定时器中建立的一个线程,我这样做为什么要么运行出错,关闭应用程序
要么根本不执行singleaircon()
//singleaircon是newdialog窗体中的数据处理函数

DWORD WINAPI CMainDlg::LonRead(LPVOID lpArg)
{
// Route the method to the actual object
CMainDlg* pThis = reinterpret_cast<CMainDlg*>(lpArg);
return pThis->LonRead();
}

DWORD CMainDlg::LonRead()
{
    if(pc104interval)
    {
  for(int sss=0;sss<100;sss++)
     g_aircon.airdata[sss]=data[sss+0x80*j];
  if(g_aircon.m_hWnd!=NULL)
             {
                g_aircon.singleaircon();
             }
    }
    pc104interval=FALSE;
    return 0;
}
maqian
驱动中牛
驱动中牛
  • 注册日期2002-08-07
  • 最后登录2014-09-16
  • 粉丝2
  • 关注1
  • 积分12分
  • 威望120点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-04-01 08:20
你挤牙膏似的,问一下贴两行代码.
检查一下\"g_aircon.airdata[sss]=data[sss+0x80*j];
\".
你看看data[sss+0x80*j]或g_aircon.airdata[sss]是不是内存访问越界.
五花马,千金裘,呼儿将出换美酒。 我不喝酒,喝可乐。
sdqdydj
驱动牛犊
驱动牛犊
  • 注册日期2005-03-12
  • 最后登录2005-12-07
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-04-01 08:41
两个数组定义如下:public: BYTE data[0xfff],indata[128];
没有用malloc作内存分配,就会产生内存访问过界的情况?
maqian
驱动中牛
驱动中牛
  • 注册日期2002-08-07
  • 最后登录2014-09-16
  • 粉丝2
  • 关注1
  • 积分12分
  • 威望120点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-04-01 08:51
你挤牙膏似的,问一下贴两行代码.
检查一下\"g_aircon.airdata[sss]=data[sss+0x80*j];
\".
你看看data[sss+0x80*j]或g_aircon.airdata[sss]是不是内存访问越界.

j的值?airdata的定义???你代码不全贴出来,我不知道问题是不是在这里,你调试一下不就知道了.
内存访问过界跟malloc没有必然联系.
五花马,千金裘,呼儿将出换美酒。 我不喝酒,喝可乐。
sdqdydj
驱动牛犊
驱动牛犊
  • 注册日期2005-03-12
  • 最后登录2005-12-07
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-04-01 11:21
我屏掉这一行就好了  g_aircon.singleaircon(); 所以与数组的赋值没有关系;但是就无法处理数据了。
不好意思!代码太长,只能把一部分修整出来才能贴!
maqian
驱动中牛
驱动中牛
  • 注册日期2002-08-07
  • 最后登录2014-09-16
  • 粉丝2
  • 关注1
  • 积分12分
  • 威望120点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-04-01 11:40
搞不懂你,\"要么根本不执行singleaircon()\"???
把singleaircon()贴出来吧.趁中午没事,给你看看.
五花马,千金裘,呼儿将出换美酒。 我不喝酒,喝可乐。
游客

返回顶部