主线程与子线程进行通讯的问题,请教各位大虾

wpmsoft 2000-08-31 02:31:00
在主线程中启动一个子线程,然后,在主线程中要检测子线程的执行情况(是否结束,执行进度等)。我使用AfxBeginThread()开始一个线程,用SetEvent()、ResetEvent()和WaitForSingleObject()实现其间的通讯。用到的信号量我放在一个全局变量中,然后这个变量(指针)做为参数传递给子线程。--但是,我却得不到正确的结果。经常在Wait的时候陷入死循环,单步跟踪主线程时,竟然发现我的信号量状态会改变!!!

哪位朋友可以给我一份示例代码吗?或者还有什么更好的办法?谢谢了。如果觉得分太少,还可以再加的。
...全文
171 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dark 2000-09-01
  • 打赏
  • 举报
回复
我刚好做了个这样的程序,现将代码发到你的信箱中请查收。
Kevin_qing 2000-08-31
  • 打赏
  • 举报
回复
用mutex!
int state:
HANDLE h_Mutex;

int GetState(){
int i;
WaitForSingleObject(h_Mutex);
i=state;
ReleaseObject();
return i;
}

void SetState(int st){

WaitForSingleObject(h_Mutex);
state=st;
ReleaseObject();
return i;
}

mainThread(){
CreateMutex...
CreateThread...
while(1){
ReadState();
}
}

DWORD WINAPI SubThread(LPVOID ){
//each time u update ur state use SetState() function
..
..
..

}


hnalbert 2000-08-31
  • 打赏
  • 举报
回复
wpmsoft:
我也觉得可以只用CEvent就可以了。
可否告知进行下载工作的函数?
wpmsoft 2000-08-31
  • 打赏
  • 举报
回复
softsprite:
 你好,谢谢你的帮助,但是我还是不很明白。我要做的工作是:在主进程中启动一个子线程,该子线程在后台进行指定文件的下载工作,下载完后便会自动结束。同时,主进程要同步工获知子线程的工作情况,比如,下载工作进行了多少?某某页是否已经下载?整个工作是否已经进行完毕?等等。
 你说的CThreadChild是一个自定义的类吗?是从CWinThread派生出来的吗?
 我看到的MSDN里面,有提到关于线程间同步的,要用到CEvent、CSingleLock等,可我总觉得没有必要这么复杂,你说呢?
 希望得到更具体的解答,先行谢谢啦。
U皮特U 2000-08-31
  • 打赏
  • 举报
回复
将信号量作为子线程CThreadChild的静态公有成员变量,有主线程中用CThreadChild::m_event来调用。

15,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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