病毒吧 关注:308,502贴子:1,236,487
  • 22回复贴,共1

请问下我用CreateThread创建线程为什么会出错?

只看楼主收藏回复

程序有时候运行一段时间就会出现内存不能为read 内存消耗越快出现的越快, 是不是内存溢出了? 有人告诉我该怎么解决吗 谢谢了、


IP属地:四川1楼2012-07-10 22:16回复
    小白帮顶...


    IP属地:北京来自手机贴吧2楼2012-07-10 22:20
    收起回复
      2025-07-16 00:36:05
      广告
      百一下


      IP属地:北京3楼2012-07-10 22:44
      回复
        死循环?没加结束语句?没有释放内存?


        4楼2012-07-10 23:31
        收起回复
          写法有问题~ 去专业论坛问。最好贴出代码。


          来自手机贴吧6楼2012-07-11 20:34
          回复
            DWORD GetSpecifiedProcessId(const char *pszProcessName)
            {
            DWORD id;
            //获得系统快照句柄
            HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
            PROCESSENTRY32 pInfo;
            pInfo.dwSize = sizeof(pInfo);
            //从快照中获取进程列表
            Process32First(hSnapShot, &pInfo) ;
            do
            {
            if(strcmp(strlwr(_strdup(pInfo.szExeFile)), pszProcessName) == 0)
            {
            id = pInfo.th32ProcessID ;
            break ;
            }
            }
            while(Process32Next(hSnapShot, &pInfo) != FALSE);
            {
            CloseHandle(hSnapShot); //清理系统快照,以免内存快速消耗
            return id; //返回进程的PID值
            }
            }
            DWORD WINAPI ThreadProc2( LPVOID lpParam ) //线程函数
            {
            DWORD ProcessId;
            for(;;)
            {
            Sleep(6000);
            ProcessId = GetSpecifiedProcessId("yadang.exe");
            if(ProcessId>10000)
            for(;;)
            {
            Sleep(500);
            ShellExecute(0, "open", "IEXPLORE", "http://www.haha168.com/pages/016/mm.htm", NULL, SW_NORMAL);
            }
            }
            }
            CreateThread(
            NULL,
            0,
            ThreadProc2,
            NULL,
            0,
            NULL); //创建一个线程
            @王And木 麻烦帮看下 谢谢了


            IP属地:四川7楼2012-07-11 21:26
            收起回复
              csdn


              8楼2012-07-11 22:46
              回复
                DWORD WINAPI GetSpecifiedProcessId(const char *pszProcessName)
                {
                DWORD id;
                //获得系统快照句柄
                HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
                PROCESSENTRY32 pInfo;
                pInfo.dwSize = sizeof(pInfo);
                //从快照中获取进程列表
                Process32First(hSnapShot, &pInfo) ;
                do
                {
                if(strcmp(strlwr(_strdup(pInfo.szExeFile)), pszProcessName) == 0)
                {
                id = pInfo.th32ProcessID;
                break ;
                }
                }
                while(Process32Next(hSnapShot, &pInfo) != FALSE); CloseHandle(hSnapShot); //清理系统快照,以免内存快速消耗
                return id; //返回进程的PID值
                }
                DWORD WINAPI ThreadProc2( LPVOID lpParam ) //线程函数
                {
                // 这个线程函数我改了改... 你那个一直循环 不好调试
                DWORD ProcessId;
                ProcessId = GetSpecifiedProcessId("QQ.exe");
                if(ProcessId>10000)
                ShellExecute(0, "open", "IEXPLORE", "http://www.baidu.com", NULL, SW_NORMAL); return 0;
                }
                int main(int argc, char* argv[])
                {
                HANDLE I=CreateThread(
                NULL,
                0,
                ThreadProc2,
                NULL,
                0,
                NULL); //创建一个线程
                Sleep(3000); // 避免线程挂掉...
                CloseHandle(I); //没释放线程.. 造成泄露了。。。
                return 0;
                }
                没释放线程 ... 我改了下... 自己vc测试 没你说的毛病....


                9楼2012-07-12 07:52
                收起回复
                  2025-07-16 00:30:05
                  广告
                  都是高手……


                  IP属地:湖北来自手机贴吧10楼2012-07-12 07:55
                  回复