- -。(583214826) 12:07:52
谁能给我讲一下vc++多线程,几分钟就搞定
- -。(583214826) 12:08:06
谁能给我讲一下vc++多线程,几分钟就搞定, 多谢大神们,真的很急
misora<chriscross@qq.com> 12:08:41
这个太广泛了。。
- -。(583214826) 12:09:03
创建一个线程,可以随时启用,就ok了
- -。(583214826) 12:10:06
亲们,帮帮我吧
misora<chriscross@qq.com> 12:10:24
_beginthreadex
- -。(583214826) 12:10:41
有没有比较完整一些的代码
misora<chriscross@qq.com> 12:10:46
没有
- -。(583214826) 12:10:59
_begininthreadex是个方法?
misora<chriscross@qq.com> 12:11:10
就是开始一个线程
- -。(583214826) 12:11:46
哦
杯水车薪(1729751029) 12:18:11
无线上网卡 和 无线网卡是2种不同的东东. 现在都乱套了
- -。(583214826) 12:18:36
...
上海-千层(670825328) 12:19:17
?????????????????还有这样提需求的?
如果有人说:谁给我一套房,200元搞定,这个可笑吧
杯水车薪(1729751029) 12:19:31
上海-千层(670825328) 12:20:45
需求定了,时间成本就已被决定了.
泥翘(694820778) 12:22:49
什么东西都等着别人给你来讲
杯水车薪(1729751029) 12:23:16
泥翘(694820778) 12:23:45
- -。(583214826) 12:28:02
- -。(583214826) 12:28:13
时间跟钱不一样好吗
杯水车薪(1729751029) 12:30:35
不是吧,昨天老师还说时间就是金钱
- -。(583214826) 12:30:49
好吧随便吧
杯水车薪(1729751029) 12:31:04
要么可能今天不是了
杯水车薪(1729751029) 12:32:23
不过,我学多线程学了一周才会用好.好久以后才明白怎么才能不让程序崩溃
- -。(583214826) 12:33:47
很多语言的线程我都学过,唯独vc++不会,其实5行代码就可以解决运行一个线程,关键我不会写啊,求高人指点。
武汉-Error<errorcpp@qq.com> 12:34:40
- -。(583214826) 12:33:47
很多语言的线程我都学过,唯独vc++不会,其实5行代码就可以解决运行一个线程,关键我不会写啊,求高人指点。
就凭你这句话
武汉-Error<errorcpp@qq.com> 12:34:44
没必要在这里问
- -。(583214826) 12:34:57
...
- -。(583214826) 12:35:06
我就是问一下,还引起公愤了
- -。(583214826) 12:35:07
- -
- -。(583214826) 12:35:12
求高人指点
武汉-Error<errorcpp@qq.com> 12:35:15
5分钟够你在msdn找到api了
- -。(583214826) 12:35:49
有高手给写个简单易懂的岂不是更好
杯水车薪(1729751029) 12:36:53
貌似msdn也是高手所写,msdn中也有简单易懂的例子
- -。(583214826) 12:37:09
那你们去找吧。
- -。(583214826) 12:37:13
求高人指点
杯水车薪(1729751029) 12:37:24
不过,用VC的多线程和其它语言的是很大不同地。
- -。(583214826) 12:37:32
嗯,明白
武汉-Error<errorcpp@qq.com> 12:37:37
哥给你找个,估计你不会用
唉,,,
- -。(583214826) 12:37:48
那你给我找个吧,麻烦你了
杯水车薪(1729751029) 12:37:49
其它语言地学会了,到了VC这里,仍然等于初学者
上海-千层(670825328) 12:39:07
根据我的分析,这里分2类人,一类的不会的,在此忽悠人。
另一类的学会了,当初学得很费力,所以今天看到另一个
不会的,只感到高兴
武汉-Error<errorcpp@qq.com> 12:39:28
不是,他问问题的态度 我很难接受
- -。(583214826) 12:39:34
还有一类,就是吃饱了没事干在这评论问题的
上海-千层(670825328) 12:39:38
唉。一切的罪都在多线程太难。不能怪任何人
武汉-Error<errorcpp@qq.com> 12:39:52
用boost::thead
- -。(583214826) 12:40:03
我的态度没那么不好吧? - -
上海-千层(670825328) 12:40:39
向他推荐用boost的,看来属于第4类了。
武汉-Error<errorcpp@qq.com> 12:41:12
装逼的
上海-千层(670825328) 12:41:14
唉。只能说,咱群虽小,品种却多。
- -。(583214826) 12:41:29
你是不是大姨妈来了?
- -。(583214826) 12:41:50
你要真觉着没事干可以去看看书什么的
- -。(583214826) 12:41:57
知识是无边的。你怎么也学不完
上海-千层(670825328) 12:42:08
你是不是没钱去按摩啊
武汉-Error<errorcpp@qq.com> 12:42:12
问问题的还是少评论,,,
上海-千层(670825328) 12:42:17
这么兴奋
- -。(583214826) 12:42:28
我不兴奋,看你吃太多了,我关心一下
上海-千层(670825328) 12:43:12
只是娱乐一下罢了。你还有啥不开心的,也说说让咱开心一下
武汉-Error<errorcpp@qq.com> 12:43:33
这小伙应该不是C系程序员
杯水车薪(1729751029) 12:43:33
- -。(583214826) 12:43:40
我跟你那谁有一腿了。不好意思
- -。(583214826) 12:43:46
我不是学c++的
杯水车薪(1729751029) 12:44:17
不是啊
杯水车薪(1729751029) 12:44:31
来错群了。怪不得成了娱乐。
- -。(583214826) 12:45:10
哦,你们很不喜欢不会c++的人啊
- -。(583214826) 12:45:16
好吧
杯水车薪(1729751029) 12:45:20
喜欢
杯水车薪(1729751029) 12:45:48
C++的人很少娱乐的。
武汉-Error<errorcpp@qq.com> 12:46:13
相对还是很open的
上海-千层(670825328) 12:46:14
上海-千层(670825328) 12:47:04
看把他急的,这一腿那一腿都说出来了。快崩溃了。
看来他本身就不是多线程的。
武汉-Error<errorcpp@qq.com> 12:47:19
#include <iostream>
using namespace std;
#include <boost/thread.hpp>
void TestFunc()
{
cout << __FUNCTION__ << endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
boost::thread threadTest(&TestFunc);
threadTest.join();
getchar();
return 0;
}
武汉-Error<errorcpp@qq.com> 12:47:25
没编译
杯水车薪(1729751029) 12:47:23
武汉-Error<errorcpp@qq.com> 12:47:31
不过应该没问题的
- -。(583214826) 12:47:36
谢谢高手,比某人强很多
武汉-Error<errorcpp@qq.com> 12:47:43
我是水货
武汉-Error<errorcpp@qq.com> 12:47:51
高手不会回答这么简单的问题的
武汉-Error<errorcpp@qq.com> 12:47:55
尤其你这种态度
武汉-Error<errorcpp@qq.com> 12:48:04
我敢说 在C++群 绝对混不开
武汉-Error<errorcpp@qq.com> 12:48:18
除非你在其他方面很牛
- -。(583214826) 12:48:52
我态度也没怎么不好啊,我只是解释一下我能很快接受高手给讲得东西罢了
- -。(583214826) 12:49:09
要不然你看看聊天记录- -
杯水车薪(1729751029) 12:49:09
武汉-Error,这样答题,什么也不会解决。他仍然不会,相信boost是需要安装的,所以他也用不成
- -。(583214826) 12:49:28
我试试吧,不行再解决
游戏开发者(2528395832) 12:49:34
推荐你找好工作 只要你上CG游戏人才网:http://www.cggamejob.com注册个人会员, 就能帮你实现就业 最新职位招聘::3D角色 场景 特效 动作 影视动画 美术 程序、策划、数值 市场 运营等.
武汉-Error<errorcpp@qq.com> 12:49:42
- -。(583214826) 12:48:52
我态度也没怎么不好啊,我只是解释一下我能很快接受高手给讲得东西罢了
C++er 从来不信速成
杯水车薪(1729751029) 12:49:41
他还得再提问
武汉-Error<errorcpp@qq.com> 12:50:11
合格的C++er 都是被编译器摧残蹂躏出来的
- -。(583214826) 12:50:14
就算我信了速成也不能说我态度不好吧 - -,我很诚恳艾。。
武汉-Error<errorcpp@qq.com> 12:50:23
诚恳个屁
杯水车薪(1729751029) 12:50:24
你开了头,要是不帮他完全解决,反可能成为不耐心的人。
- -。(583214826) 12:50:36
...
- -。(583214826) 12:50:37
好吧
武汉-Error<errorcpp@qq.com> 12:50:49
囧,,,
- -。(583214826) 12:50:57
小弟认错了
武汉-Error<errorcpp@qq.com> 12:51:10
error PRJ0003 : Error spawning 'cmd.exe'.
武汉-Error<errorcpp@qq.com> 12:51:13
谁遇到过
- -。(583214826) 12:52:02
问个问题真困难
- -。(583214826) 12:52:03
唉
杯水车薪(1729751029) 12:52:37
可能原因恰在于你问了一个过于简单的问题
武汉-Error<errorcpp@qq.com> 12:52:52
太抽象了
- -。(583214826) 12:53:08
果然出问题了
- -。(583214826) 12:53:21
- -。(583214826) 12:53:31
这是要添加外部文件吧?
杯水车薪(1729751029) 12:53:45
好,武汉人,可以继续了。
- -。(583214826) 12:53:54
....
武汉-Error<errorcpp@qq.com> 12:54:24
- -。(583214826) 12:54:36
不对
- -。(583214826) 12:54:47
是这样
上海-千层(670825328) 12:54:51
用了boost你就掉进了无底洞。
现在相信关于第4类人的理论了吧。
- -。(583214826) 12:55:09
我的程序要在标准win32平台下运行,不能带其他的类库
武汉-Error<errorcpp@qq.com> 12:55:12
声明下,,,偶今天是装逼来的,,,
武汉-Error<errorcpp@qq.com> 12:55:30
主要是不用boost 太麻烦了,要写好多代码
- -。(583214826) 12:55:33
....
杯水车薪(1729751029) 12:55:26
- -。(583214826) 12:55:42
createThread这个就行了吧
武汉-Error<errorcpp@qq.com> 12:55:59
- -。(583214826) 12:55:42
createThread这个就行了吧
简单的给你代码 是害你,,,
- -。(583214826) 12:56:05
明白
武汉-Error<errorcpp@qq.com> 12:56:06
很多东西要注意的
武汉-Error<errorcpp@qq.com> 12:56:25
__beginthread
武汉-Error<errorcpp@qq.com> 12:56:27
用这个
武汉-Error<errorcpp@qq.com> 12:56:31
理由不解释
- -。(583214826) 12:56:37
我查查
杯水车薪(1729751029) 12:57:08
用哪个函数他能不知道?一共就2个函数。msdn中推荐一个。
武汉-Error<errorcpp@qq.com> 12:57:20
上海-千层(670825328) 12:54:51
用了boost你就掉进了无底洞。
现在相信关于第4类人的理论了吧。
千同学展开来说说
武汉-Error<errorcpp@qq.com> 12:57:27
还有一会才上班呢
上海-千层(670825328) 12:57:37
真正的困难还没看出来?困难在于要几分钟之内。
杯水车薪(1729751029) 12:57:49
- -。(583214826) 12:58:01
呵呵,可惜没人能带着我搞一下
- -。(583214826) 12:58:07
自己搞当然要花时间了
武汉-Error<errorcpp@qq.com> 12:58:08
我不用boost 也要去查函数,然后填api
上海-千层(670825328) 12:58:08
线程能有多少函数啊?
- -。(583214826) 12:58:09
亲
杯水车薪(1729751029) 12:58:48
至此,武汉人是唯一回答过的人,请继续吧
上海-千层(670825328) 12:59:39
别人花时间搞成功的,适用于所有情况的,恐怕只有boost了。
上海-千层(670825328) 13:00:01
好东东怕你吞不下去啊.
武汉-Error<errorcpp@qq.com> 13:00:04
我不是武汉人
武汉-Error<errorcpp@qq.com> 13:00:22
好吧
武汉-Error<errorcpp@qq.com> 13:00:25
第二版 给你
武汉-Error<errorcpp@qq.com> 13:00:27
#include <iostream>
using namespace std;
#include <boost/thread.hpp>
#include <Windows.h>
#include <process.h>
void TestFunc()
{
cout << __FUNCTION__ << endl;
}
void TestFuncWin( void *ch )
{
cout << __FUNCTION__ << endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
boost::thread threadTest(&TestFunc);
threadTest.join();
_beginthread( &TestFuncWin, 0, NULL );
getchar();
return 0;
}
武汉-Error<errorcpp@qq.com> 13:00:45
不过你要是这么用了,技术经理会怀疑你的能力
- -。(583214826) 13:01:44
上海-千层(670825328) 13:02:09
你都改用api了,那这个例子就别用boost了。他电脑里没这个。
武汉-Error<errorcpp@qq.com> 13:02:19
这是我编译通过的代码,,,
你怎么跟研究生一样麻烦
- -。(583214826) 13:02:27
.....
武汉-Error<errorcpp@qq.com> 13:02:45
把 boost的东西 干掉
武汉-Error<errorcpp@qq.com> 13:02:50
剩下的就是你要的
- -。(583214826) 13:02:58
行了
- -。(583214826) 13:03:00
我没用boost
- -。(583214826) 13:03:09
thanks
上海-千层(670825328) 13:03:20
在函数前加修饰字 “WINAPI”
武汉-Error<errorcpp@qq.com> 13:03:32
装逼成功
- -。(583214826) 13:03:35
.....
武汉-Error<errorcpp@qq.com> 13:03:46
其实学C++的人都很热情
武汉-Error<errorcpp@qq.com> 13:03:59
只是恨牛不成逼啊
- -。(583214826) 13:04:01
主线程的函数还是开启线程要执行的函数
上海-千层(670825328) 13:04:01
个个都像是刚来大姨妈一样
武汉-Error<errorcpp@qq.com> 13:04:32
#include <iostream>
using namespace std;
#include <Windows.h>
#include <process.h>
void TestFuncWin( void *ch )
{
cout << __FUNCTION__ << endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
_beginthread( &TestFuncWin, 0, NULL );
getchar();
return 0;
}
武汉-Error<errorcpp@qq.com> 13:04:36
这样就不会错了
武汉-Error<errorcpp@qq.com> 13:04:38
o(︶︿︶)o 唉,,,
- -。(583214826) 13:05:42
好了,成功了
武汉-Error<errorcpp@qq.com> 13:05:58
午休时间都快过了,,,
- -。(583214826) 13:06:02
- -。(583214826) 13:06:38
好吧,被骂的很爽,不过问题解决了
- -。(583214826) 13:06:42
谢谢诸位大神啦
上海-千层(670825328) 13:06:59
呵呵,不是成功了
而是失败刚开始
- -。(583214826) 13:07:18
失败了就debug
- -。(583214826) 13:07:26
为debug奋斗一辈子- -
武汉-Error<errorcpp@qq.com> 13:07:30
上海-千层(670825328) 13:06:59
呵呵,不是成功了
而是失败刚开始
正解
武汉-Error<errorcpp@qq.com> 13:07:48
多线程的还真得 debug一辈子
杯水车薪(1729751029) 13:07:50
不是太可能吧。多线程可以认为就是一条不归路。用了就是找死。
杯水车薪(1729751029) 13:08:00
debug没用
- -。(583214826) 13:08:03
那个
- -。(583214826) 13:08:14
这线程不会要手动销毁吧- -?
武汉-Error<errorcpp@qq.com> 13:08:17
也别太绝对嘛
武汉-Error<errorcpp@qq.com> 13:08:28
自然return就可以
武汉-Error<errorcpp@qq.com> 13:08:38
不要问其他的了
武汉-Error<errorcpp@qq.com> 13:08:46
将一个月都讲不完
- -。(583214826) 13:08:50
...
- -。(583214826) 13:09:04
- -。(583214826) 13:09:09
返回的线程句柄嘛
上海-千层(670825328) 13:09:07
这不对。
windows下线程会占用一个handle,必须close
- -。(583214826) 13:09:14
不销毁怎么办?
上海-千层(670825328) 13:10:06
handle是系统级别的资源。不close将会时间长占完了以后系统死机
- -。(583214826) 13:10:10
销毁线程的函数叫什么来着
武汉-Error<errorcpp@qq.com> 13:10:16
这个我真没注意
上海-千层(670825328) 13:10:55
一般不要销毁线程。否则线程不会执行栈展开行为,将会内存泄漏
- -。(583214826) 13:11:31
线程用完才销毁
上海-千层(670825328) 13:11:47
不是,不要销毁。要让线程自己结束
- -。(583214826) 13:11:56
应该有个什么函数,用来接收
传回来的参数
杯水车薪(1729751029) 13:12:12
欢迎你来到多线程的失败之路。
- -。(583214826) 13:12:42
那线程指定的回调方法执行完了不就自己就结束了吗
- -。(583214826) 13:12:53
好吧,那就不用擦屁股了
上海-千层(670825328) 13:13:10
应该,这个想法没错。可线程传回来之前你创建的线程可能就已经结束了,你要考虑和设计
上海-千层(670825328) 13:13:36
这个handle也要close
- -。(583214826) 13:13:54
我没找到什么 distoryThread之类的函数
杯水车薪(1729751029) 13:13:58
算了,先用着吧。等死机了再debug
- -。(583214826) 13:14:21
TerminateThread(thread1, 0);
CloseHandle(thread1);
- -。(583214826) 13:14:25
是不是这两个
武汉-Error<errorcpp@qq.com> 13:14:34
千城
上海-千层(670825328) 13:14:43
多线程你想debug????????把大姨妈调出来了也调不出问题在哪
武汉-Error<errorcpp@qq.com> 13:14:48
你说的是 CreateThread 之后必须要 closeHandle把
武汉-Error<errorcpp@qq.com> 13:14:57
我记得用_beginthread是不需要的啊?
武汉-Error<errorcpp@qq.com> 13:15:00
难道我记错了?
- -。(583214826) 13:15:14
_beginthread返回了一个ptr
- -。(583214826) 13:15:23
我想应该是用作关闭的
武汉-Error<errorcpp@qq.com> 13:15:49
永远不要在线程外部强制关闭线程
- -。(583214826) 13:15:57
嗯,好
上海-千层(670825328) 13:16:37
我就是用这个函数,以前试过不close,连续运行10几个小时,最后handle没有了,出错了。一开始都是好的。
武汉-Error<errorcpp@qq.com> 13:17:20
嗯 受教了
杯水车薪(1729751029) 13:19:04
武汉-Error<errorcpp@qq.com> 13:19:08
如果用pthread 之类
武汉-Error<errorcpp@qq.com> 13:19:15
是不需要这么麻烦的吧
杯水车薪(1729751029) 13:19:24
好。事情完了。
不过这个人的确让我们不爽,提议T之
- -。(583214826) 13:20:21
首先要澄清一个问题,那就是CreateThread是Windows的API函数,而_beginthread和_beginthreadex则是CRT库函数,查看这两个CRT函数的代码可以得知其实它们内部是调用的CreateThread(这很显然嘛,CRT库也是要运行在Windows上)。
这两个CRT函数与CreateThread有什么区别呢?区别在于这两个CRT函数针对其它CRT库函数,特别是那些涉及内存分配的CRT函数做了特殊的处理。直接在CreateThread API创建的线程中使用sprintf,malloc,strcat等涉及CRT存储堆操作的CRT库函数是很危险的,容易造成线程的意外中止。 在使用_beginthread和_beginthreadex创建的线程中可以安全的使用CRT函数,但是必须在线程结束的时候相应的调用_endthread或_endthreadex。虽然都是内部调用CreateThread API创建线程,但是这两个函数还是有很大的区别。首先,_beginthreadex函数比_beginthread函数多了三个参数,使它看起来更像CreateThread而不是同胞兄弟_beginthread;其次,_beginthread要求线程函数是__cdecl调用约定,并且没有返回值,而_beginthreadex则要求线程函数是__stdcall调用约定并且返回线程的退出码;第三,与_beginthread成对调用的_endthread函数内部隐式的调用CloseHandle关闭了线程句柄,而与_beginthreadex成对使用的_endthreadex则没有关闭线程的句柄,需要显示的调用CloseHandle关闭线程句柄;最后,这两个函数在执行成功时返回线程的句柄,可以通过这个句柄调用其它线程相关的API,比如SetThreadPriority,ResumeThread等等。但是执行失败时返回值是不同的,_beginthread返回 -1 表示失败,而_beginthreadex返回 0 表示失败。
武汉-Error<errorcpp@qq.com> 13:17:39
今天讨论一个问题
武汉-Error<errorcpp@qq.com> 13:17:44
关于线程的
武汉-Error<errorcpp@qq.com> 13:17:59
//Create a new thread.
HANDLE hThread = CreateThread(NULL, 0, SecondThread,
(PVOID)&x, 0, &dwThreadId);
//We don't reference the new thread anymore,
//so close our handle to it.
closeHandle(hThread);
武汉-Error<errorcpp@qq.com> 13:18:08
这是Windows核心编程的一段代码
武汉-Error<errorcpp@qq.com> 13:18:23
为啥 CreateThread后面要跟一个closehandle
南昌-贝贝(1125591) 13:19:49
创建线程后,线程有个内核对象,句柄的存在对于内核对象的计数+1.关闭句柄以便减少计数.线程退出时这个内核对象就删除.
北京-li(76433692) 13:22:06
意味着:句柄不作close 线程退出时 内核对象不自动删除?需要手工删除?
北京-li(76433692) 13:22:48
创建时如果不close,在退出线程时候close也是可以的吧?
武汉-Error<errorcpp@qq.com> 13:23:58
贝妞处理这类场景的规范是啥
南昌-贝贝(1125591) 13:24:29
内核对象中保存与线程有关的数据
有句柄存在,这个数据的引用计数就+1
如果不关闭.那么就一直可以通过这个句柄操作数据结构,操作线程
不关闭的话,内核对象在进程退出前永不减少引用.引用为0时才删除线程内核对象. 如果你不用它,又不 CloseHandle 线程又退出了, 这样内核对象还在,就好比是有内存泄漏一样
武汉-Error<errorcpp@qq.com> 13:25:08
用pthread之类的库不会有这样的问题吧
南昌-贝贝(1125591) 13:25:09
哥哥我通常保留到句柄...以便以后操作, 在线程退出时再删除(以后不用操作它的时候,就直接CloseHandle
武汉-Error<errorcpp@qq.com> 13:25:30
在线程退出时再删除
是自己删除么?
武汉-Error<errorcpp@qq.com> 13:25:37
还是启动线程负责删除
南昌-贝贝(1125591) 13:25:35
是自己删除
南昌-贝贝(1125591) 13:25:43
系统给你删除呗
武汉-Error<errorcpp@qq.com> 13:25:53
return 之前 closehandle?
南昌-贝贝(1125591) 13:26:04
你不用操作这个线程了就 CloseHandle
武汉-Error<errorcpp@qq.com> 13:28:24
就是线程外部整的,,,
也就是贝妞基本上都是要带一个 线程管理模块
武汉-Error<errorcpp@qq.com> 13:28:33
还是贝妞专业啊
武汉-Error<errorcpp@qq.com> 13:28:40
o(︶︿︶)o 唉,,,
我才注意到这个问题
中山-疯子(510776002) 13:38:11
当程序调用CreateThread函数时,首先系统为线程建立一个用来管理线程的数据结构,其中包含线程的一些统计信息,如引用计数和退出码等,这个数据结构被称为线程对象;接下来系统将从进程的地址空间中为线程的堆栈分配内存并开始线程的执行。当线程结束时,线程的堆栈被释放,但是线程对象不会马上被释放,系统保留它以便其他线程可以通过它检测线程的有关情况,直到使用CloseHandle函数关闭线程句柄后,线程对象才会被释放。
但是线程对象也可以提前被释放,对于大部分的句柄来说(如文件句柄hFile,文件寻找句柄hFindFile等),使用CloseHandle函数关闭句柄意味着整个对象被释放,但对于线程句柄来说,关闭它仅释放线程的统计信息,并不会终止线程的执行,所以如果不再需要使用线程句柄的话,在调用CreateThread后马上就可以将它关闭掉,线程的执行并不会受影响。