程序有一个线程,线程运行不结束,主进程就继续等待

时间:2022-10-26 18:35:46
程序有一个线程,线程运行不结束,主进程就继续等待
用什么函数比较好?谢谢

17 个解决方案

#1


CWinThread* m_pThreadCheck;
m_pThreadCheck = AfxBeginThread(ThreadExcelExchange, this, THREAD_PRIORITY_BELOW_NORMAL);
if (m_pThreadCheck != NULL)
{
WaitForSingleObject(m_pThreadCheck->m_hThread, INFINITE);
        }

#2


如果存在窗口,在响应窗口关闭 WM_CLOSE 的时候,检查这个线程是否已经关闭。

#3


用WaitForSingleObject等待线程句柄就行了。

#4


WaitForSingleObject()等待线程句柄,主线程中放一个while(true)的死循环,然后里面WaitForSingleObject等待,当等到了,就break退出循环,同时退出主线程

#5


WaitForSingleObject函数监视该线程  当线程执行完即关闭时候 线程句柄有非信号太转变为信号太 等待完毕OK

#6


二楼正解

#7


 同 步  

#8


引用 1 楼 caitian6 的回复:
C/C++ code
CWinThread* m_pThreadCheck;
m_pThreadCheck = AfxBeginThread(ThreadExcelExchange, this, THREAD_PRIORITY_BELOW_NORMAL);
if (m_pThreadCheck != NULL)
    {
        WaitForSingleObject(m_pThreadCheck->m_hThread, INFINITE);
        }
INFINITE=》时间不是要等待很久

#9


WaitForSingleObject等待线程执行完毕,句柄有信号状态。

#10


一般都是用WaitForSingleObject来完成,等待句柄信号量的信号。。

#11


INFINITE=》时间不是要等待很久?
INFINITE,是无限长, 一直要等到子线程结束,有信号量为止.

#12


引用 11 楼 caitian6 的回复:
INFINITE=》时间不是要等待很久?
INFINITE,是无限长, 一直要等到子线程结束,有信号量为止.
 谢谢

#13


引用 1 楼 caitian6 的回复:
C/C++ code
CWinThread* m_pThreadCheck;
m_pThreadCheck = AfxBeginThread(ThreadExcelExchange, this, THREAD_PRIORITY_BELOW_NORMAL);
if (m_pThreadCheck != NULL)
    {
        WaitForSingleObject(m_pT……

INFINITE 可以设置5秒?

#14


设置退出的信号量 SetEvents

在WM_CLOSE消息进行判断,退出信号有效,则退出

#15


引用 13 楼 w20011025 的回复:
引用 1 楼 caitian6 的回复:
C/C++ code
CWinThread* m_pThreadCheck;
m_pThreadCheck = AfxBeginThread(ThreadExcelExchange, this, THREAD_PRIORITY_BELOW_NORMAL);
if (m_pThreadCheck != NULL)
{
WaitForSingleO……
要是 子线程只运行5秒,10秒就结束呢?

#16


如果参数是INFINITE, 线程运行10秒结束, 此时 m_pThreadCheck->m_hThread 置为有信号量,
WaitForSingleObject等到信号量了, 所以返回, 程序继续往下执行.

如果参数是5000(毫秒),  线程运行10秒结束, 那么WaitForSingleObject等到5秒时,没有信号量,
WaitForSingleObject也会返回,继续往下执行.(也就是说,子线程没有结束, 主线程就往下执行了.)

多看看MSDN ,上网搜索, 答得真累

   

#17


引用 16 楼 caitian6 的回复:
如果参数是INFINITE, 线程运行10秒结束, 此时 m_pThreadCheck->m_hThread 置为有信号量,
WaitForSingleObject等到信号量了, 所以返回, 程序继续往下执行.

如果参数是5000(毫秒), 线程运行10秒结束, 那么WaitForSingleObject等到5秒时,没有信号量,
WaitForSingleObject也会返回,继续往下执……
谢谢

#1


CWinThread* m_pThreadCheck;
m_pThreadCheck = AfxBeginThread(ThreadExcelExchange, this, THREAD_PRIORITY_BELOW_NORMAL);
if (m_pThreadCheck != NULL)
{
WaitForSingleObject(m_pThreadCheck->m_hThread, INFINITE);
        }

#2


如果存在窗口,在响应窗口关闭 WM_CLOSE 的时候,检查这个线程是否已经关闭。

#3


用WaitForSingleObject等待线程句柄就行了。

#4


WaitForSingleObject()等待线程句柄,主线程中放一个while(true)的死循环,然后里面WaitForSingleObject等待,当等到了,就break退出循环,同时退出主线程

#5


WaitForSingleObject函数监视该线程  当线程执行完即关闭时候 线程句柄有非信号太转变为信号太 等待完毕OK

#6


二楼正解

#7


 同 步  

#8


引用 1 楼 caitian6 的回复:
C/C++ code
CWinThread* m_pThreadCheck;
m_pThreadCheck = AfxBeginThread(ThreadExcelExchange, this, THREAD_PRIORITY_BELOW_NORMAL);
if (m_pThreadCheck != NULL)
    {
        WaitForSingleObject(m_pThreadCheck->m_hThread, INFINITE);
        }
INFINITE=》时间不是要等待很久

#9


WaitForSingleObject等待线程执行完毕,句柄有信号状态。

#10


一般都是用WaitForSingleObject来完成,等待句柄信号量的信号。。

#11


INFINITE=》时间不是要等待很久?
INFINITE,是无限长, 一直要等到子线程结束,有信号量为止.

#12


引用 11 楼 caitian6 的回复:
INFINITE=》时间不是要等待很久?
INFINITE,是无限长, 一直要等到子线程结束,有信号量为止.
 谢谢

#13


引用 1 楼 caitian6 的回复:
C/C++ code
CWinThread* m_pThreadCheck;
m_pThreadCheck = AfxBeginThread(ThreadExcelExchange, this, THREAD_PRIORITY_BELOW_NORMAL);
if (m_pThreadCheck != NULL)
    {
        WaitForSingleObject(m_pT……

INFINITE 可以设置5秒?

#14


设置退出的信号量 SetEvents

在WM_CLOSE消息进行判断,退出信号有效,则退出

#15


引用 13 楼 w20011025 的回复:
引用 1 楼 caitian6 的回复:
C/C++ code
CWinThread* m_pThreadCheck;
m_pThreadCheck = AfxBeginThread(ThreadExcelExchange, this, THREAD_PRIORITY_BELOW_NORMAL);
if (m_pThreadCheck != NULL)
{
WaitForSingleO……
要是 子线程只运行5秒,10秒就结束呢?

#16


如果参数是INFINITE, 线程运行10秒结束, 此时 m_pThreadCheck->m_hThread 置为有信号量,
WaitForSingleObject等到信号量了, 所以返回, 程序继续往下执行.

如果参数是5000(毫秒),  线程运行10秒结束, 那么WaitForSingleObject等到5秒时,没有信号量,
WaitForSingleObject也会返回,继续往下执行.(也就是说,子线程没有结束, 主线程就往下执行了.)

多看看MSDN ,上网搜索, 答得真累

   

#17


引用 16 楼 caitian6 的回复:
如果参数是INFINITE, 线程运行10秒结束, 此时 m_pThreadCheck->m_hThread 置为有信号量,
WaitForSingleObject等到信号量了, 所以返回, 程序继续往下执行.

如果参数是5000(毫秒), 线程运行10秒结束, 那么WaitForSingleObject等到5秒时,没有信号量,
WaitForSingleObject也会返回,继续往下执……
谢谢