我在应用程序中开启了3个线程,分别为线程A,线程B,线程C,我要在线程A和线程B执行完毕后,线程C才开始执行,我在MFC下如何去实现呢?
解决方案 »
- ModifyStyle出错
- .cpp 中写的类, 如何在 .h 前部声明
- 调用MFC扩展dll中对话框,一闪程序就没有反应了
- 鼠标移到button时,出现提示,离开button时又消失?
- odbc的问题:向空白表中添加一条记录,为什么程序会退出,如果添加之前表中已有记录就不会出现这种情况,这是怎么回事啊?请教
- 在程序中,创建对话框,如果错了,想把它删掉,怎样实现?是不是把Dlg**.h和Dlg**.cpp删掉就可以了?
- 求WHITE_BRUSH的定义方式
- 各位高人,我想学系统地学一下控件.哪位高人给推荐几本好书呀??????
- 我有英文字典dic文件,谁要???
- 表达式的问题
- 请问福昕软件(北京)开发有限公司怎么样,大家有了解的么?
- 关闭对话框不成功
保证每次只有2个线程在跑,可以去看看信标。
我在应用程序的代码如下:
void mydlg::start_thread()
{
//开启通讯线程1
HANDLE hThread;
hThread = CreateThread(NULL, 0, thread_proc_tongxun1, this, 0, NULL);
CloseHandle(hThread); //开启通讯线程2
HANDLE hThread;
hThread = CreateThread(NULL, 0, thread_proc_tongxun2, this, 0, NULL);
CloseHandle(hThread); //开启通讯线程3
HANDLE hThread;
hThread = CreateThread(NULL, 0, thread_proc_tongxun3, this, 0, NULL);
CloseHandle(hThread);
}DWORD WINAPI thread_proc_tongxun1(LPVOID lpParameter)
{
(mydlg *)lpParameter)->tongxun1 = 1;//线程1执行完的标志
}
DWORD WINAPI thread_proc_tongxun2(LPVOID lpParameter)
{
(mydlg *)lpParameter)->tongxun2 = 1;//线程2执行完的标志}
DWORD WINAPI thread_proc_tongxun3(LPVOID lpParameter)
{
//要求线程3在线程1和线程2执行完毕后,才执行线程3的程序
这里的代码该如何实现
}
hThread[0] = CreateThread(...); // 开始线程AhThread[1] = CreateThread(...); // 开始线程B::WaitForMultipleObjects(2, &hThread, TRUE, INFINITE);CreateThread(...); // 开始线程C
for(int i=0;i<=3;i++){//循环开3个线程
WaitForSingleObject(hSemaphore,INFINITE);
//等待信标的计数器可用,保证每次只有2个线程
//等到一个可用资源,计数器减1
hThread = CreateThread(NULL,0,threadPro,(LPVOID)i,0,NULL);
//在线程内部释放占用的资源,调用ReleaseSemaphore(hSemaphore,1,NULL);
//使信标的计数器加1
Sleep(SleepTime);
if(hThread!=NULL)
CloseHandle(hThread);
}
说明:HANDLE hThread[2];是mydlg类的变量 void mydlg::start_thread()
{
//开启通讯线程1
hThread[0]=CreateThread(NULL, 0, thread_proc_tongxun1, this, 0, NULL); //开启通讯线程2
hThread[1]=CreateThread(NULL, 0, thread_proc_tongxun2, this, 0, NULL); //开启通讯线程3
HANDLE hThread
hThread=(NULL, 0, thread_proc_tongxun3, this, 0, NULL);
//调用一个非模态对话框,给用户显示一些提示信息
dlg_msg my_msg_Dlg;//定义界面提示对话框
my_msg_Dlg.DoModal();//显示对话框
CloseHandle(hThread[0]);
CloseHandle(hThread[1]);
CloseHandle(hThread);
}
DWORD WINAPI thread_proc_tongxun1(LPVOID lpParameter)
{
线程1执行
}
DWORD WINAPI thread_proc_tongxun2(LPVOID lpParameter)
{
线程2执行
} DWORD WINAPI thread_proc_tongxun3(LPVOID lpParameter)
{
//要求线程3在线程1和线程2执行完毕后,才执行线程3的程序
::WaitForMultipleObjects(2, &hThread, TRUE, INFINITE);
线程3执行
}
event[2]DWORD WINAPI thread_proc_tongxun1(LPVOID lpParameter)
{
线程1执行
event[0] = true;
}
DWORD WINAPI thread_proc_tongxun2(LPVOID lpParameter)
{
线程2执行
event[1] = true;
} DWORD WINAPI thread_proc_tongxun3(LPVOID lpParameter)
{
//要求线程3在线程1和线程2执行完毕后,才执行线程3的程序
::WaitForMultipleObjects(2, &event, TRUE, INFINITE);
线程3执行
}
return;线程bg ++;
return;线程c
while(g != 2);
...
return;----------------------
也可以吧!!!!