创建线程是传递参数!!!
时间:2008-05-13 16:09:23
来源:论坛整理 作者: 编辑:chinaitzhe
这么做对吗
或者应该怎么做?
- C/C code
Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ #ifndef __B__H__ #define __B__H__ #include <iostream> #include <windows.h> #include "A.h" class CA; using namespace std; class CB { public: HANDLE hEvent; void InitResource(CA *pcb) { DWORD dwThreadID; HANDLE hThread = CreateThread( NULL, 0, process, (LPVOID)pcb, 0, &dwThreadID); } static DWORD WINAPI process(LPVOID pParam) { HANDLE hEvent; CA *pca = (CA*)pParam; while (1) { DWORD dwRet; dwRet = WaitForSingleObject(hEvent); if (dwRet == WAIT_OBJECT_0) { int i = pca->Get(); cout<<i<<endl; } } } private: }; #endif
网友回复:当然可以,MFC就是这么做的,但是要注重使用这个类指针时最好加锁
网友回复:可以这么用,不过就是小心不要出什么同步的问题或者悬挂指针。
网友回复:注重同步吧
网友回复:那刚才得那个程序中
静态函数里的
pca不能识别是怎么回事?
网友回复:找不到CA类的定义
网友回复:
是的。但是我在“A.h”中其实已经定义了CA
为什么在静态方法中看不到呢?
网友回复:我也是这么做的,运行的很好
但多线程最难的是同步问题
你的代码中没有实现
自己改下吧
网友回复:
pca那行无法识别的问题你没碰到?。。。。
另一个类CA有什么非凡要注重的问题吗?
我把全部代码都放上
帮忙看下!
- C/C code
Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ #ifndef __B__H__ #define __B__H__ #include <iostream> #include <windows.h> #include "A.h" #include "AB.h" class CA; using namespace std; class CB { public: void InitResource(CA *pcb) { DWORD dwThreadID; HANDLE hThread = CreateThread( NULL, 0, process, (LPVOID)pcb, 0, &dwThreadID); } void InitEvent() { hEvent = CreateEvent( NULL, FALSE, FALSE, NULL); } static DWORD WINAPI process(LPVOID pParam) { class CA; CA *pca = (CA*)pParam; while (1) { DWORD dwRet; dwRet = WaitForSingleObject(hEvent, INFINITE); if (dwRet == WAIT_OBJECT_0) { int i = pca->Get(); cout<<i<<endl; } } } private: }; #endif #ifndef __A__H__ #define __A__H__ #include <windows.h> #include <stdio.h> #include "B.h" #include "AB.h" class CA { public: CA() { a = 0; } static int Get() { return a; } void Change(int temp) { a = temp; } void InitResource() { DWORD dwThreadID; HANDLE hThread = CreateThread( NULL, 0, process, (LPVOID)this, 0, &dwThreadID); } static DWORD WINAPI process(LPVOID pParam) { while(1) { int a; scanf("%d", &a); CA ca; ca.Change(a); SetEvent(hEvent); } } private: int a; }; #endif #ifndef __AB__H__ #define __AB__H__ HANDLE hEvent; #endif #include "A.h" #include "B.h" #include "AB.h" int main() { CA ca; CA *pca = &ca; CB cb; ca.InitResource(); cb.InitEvent(); cb.InitResource(pca); return 0; }
网友回复:我只是说你的指针传递方式正确
看了你的代码
我无语了
ca.InitResource();
cb.InitEvent();
cb.InitResource(pca);
之后
main函数马上结束
ca析构
你那些子线程会发生什么事?
我没有编译你的代码
不知道实际运行后果会是什么
网友回复:我可以在里面加sleep等待,或者加while循环
但首先我想让他编译通过!!!
网友回复:
你应该在main中判定子线程是否结束才能决定要不要return
比如设置一个全局变量
你的代码大可不必如此复杂
比如一个全局变量作为读取的公共缓冲区就可以了
现在你的头文件互相包含应该会有问题
a.h 中不需要包含#include "B.h"吧?
网友回复:都是很好的建议! 值得学习
关键字:创建,线程,传递,参数,
下一篇:下面没有链接了











文章评论
共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面