在主函数中:
hMainThread = GetCurrentThread();
...
SuspendThread( hMainThread );
p:...
在子线程中:
if( ... )
ResumeThread( hMainThread );
这样能唤醒主线程嘛?
主线程是从p处开始执行吗?
7 个解决方案
#1
按道理是可以在其他线程启动主线程的,问题是确保子线程已经启动,并能确保结束前能激活或创建其它有效的线程,避免程序陷入无反应状态!
#2
这种情况还不如主线程中WaitForSingleObject等待子线程触发,而不是暂停主线程,以免引起程序阻塞
#3
你的理解是正确的。
不过很奇怪,你为什么要暂停主线程呢?
不过很奇怪,你为什么要暂停主线程呢?
#4
如果有界面的话,又要等待子线程的某个时间,使用MsgWaitForMultipleObjects函数。
既能达到你的目的,又不影响系统界面的响应
既能达到你的目的,又不影响系统界面的响应
#5
因为我要取用N个子线程的结果作为主线程下一步处理之用。
用waitForMultipleObjects函数可以实现我的功能。
但是存在另外一个问题就是:
每次ResumeThread之后,子线程是重新执行一遍呢,还是从头到尾只执行一遍呢?
此外:
子线程中有大量的堆操作,如何使各个线程共享这些空间,就像单线程一样。
用waitForMultipleObjects函数可以实现我的功能。
但是存在另外一个问题就是:
每次ResumeThread之后,子线程是重新执行一遍呢,还是从头到尾只执行一遍呢?
此外:
子线程中有大量的堆操作,如何使各个线程共享这些空间,就像单线程一样。
#6
我需要在主线程中循环执行子线程
while( ... )
{
...
for(int i = 0; i < n; ++i )
{
ResumeThread(hHandle[i]);
}
WaitForMutilpleObjects( n, hHandle, TRUE, INFINIT );
...
}
这样的代码能够实现循环执行子线程嘛?
也就是每次ResumeThread之后子线程都能像被调用一次似的执行一遍嘛?
while( ... )
{
...
for(int i = 0; i < n; ++i )
{
ResumeThread(hHandle[i]);
}
WaitForMutilpleObjects( n, hHandle, TRUE, INFINIT );
...
}
这样的代码能够实现循环执行子线程嘛?
也就是每次ResumeThread之后子线程都能像被调用一次似的执行一遍嘛?
#7
1. 但是存在另外一个问题就是:
每次ResumeThread之后,子线程是重新执行一遍呢,还是从头到尾只执行一遍呢?
从上次执行为位置开始执行。
2.子线程中有大量的堆操作,如何使各个线程共享这些空间,就像单线程一样。
进程中的变量,各个线程都是可以访问到得,因为变量的地址在进程中是唯一的。
3. 这样的代码能够实现循环执行子线程嘛?
也就是每次ResumeThread之后子线程都能像被调用一次似的执行一遍嘛?
如果你仅仅是想让某个函数在子线程中循环执行,你没必要那样子做。在你的子线程设置一个循环,使用WaitForMutilpleObjects函数,接受主线程的控制。
每次ResumeThread之后,子线程是重新执行一遍呢,还是从头到尾只执行一遍呢?
从上次执行为位置开始执行。
2.子线程中有大量的堆操作,如何使各个线程共享这些空间,就像单线程一样。
进程中的变量,各个线程都是可以访问到得,因为变量的地址在进程中是唯一的。
3. 这样的代码能够实现循环执行子线程嘛?
也就是每次ResumeThread之后子线程都能像被调用一次似的执行一遍嘛?
如果你仅仅是想让某个函数在子线程中循环执行,你没必要那样子做。在你的子线程设置一个循环,使用WaitForMutilpleObjects函数,接受主线程的控制。
#1
按道理是可以在其他线程启动主线程的,问题是确保子线程已经启动,并能确保结束前能激活或创建其它有效的线程,避免程序陷入无反应状态!
#2
这种情况还不如主线程中WaitForSingleObject等待子线程触发,而不是暂停主线程,以免引起程序阻塞
#3
你的理解是正确的。
不过很奇怪,你为什么要暂停主线程呢?
不过很奇怪,你为什么要暂停主线程呢?
#4
如果有界面的话,又要等待子线程的某个时间,使用MsgWaitForMultipleObjects函数。
既能达到你的目的,又不影响系统界面的响应
既能达到你的目的,又不影响系统界面的响应
#5
因为我要取用N个子线程的结果作为主线程下一步处理之用。
用waitForMultipleObjects函数可以实现我的功能。
但是存在另外一个问题就是:
每次ResumeThread之后,子线程是重新执行一遍呢,还是从头到尾只执行一遍呢?
此外:
子线程中有大量的堆操作,如何使各个线程共享这些空间,就像单线程一样。
用waitForMultipleObjects函数可以实现我的功能。
但是存在另外一个问题就是:
每次ResumeThread之后,子线程是重新执行一遍呢,还是从头到尾只执行一遍呢?
此外:
子线程中有大量的堆操作,如何使各个线程共享这些空间,就像单线程一样。
#6
我需要在主线程中循环执行子线程
while( ... )
{
...
for(int i = 0; i < n; ++i )
{
ResumeThread(hHandle[i]);
}
WaitForMutilpleObjects( n, hHandle, TRUE, INFINIT );
...
}
这样的代码能够实现循环执行子线程嘛?
也就是每次ResumeThread之后子线程都能像被调用一次似的执行一遍嘛?
while( ... )
{
...
for(int i = 0; i < n; ++i )
{
ResumeThread(hHandle[i]);
}
WaitForMutilpleObjects( n, hHandle, TRUE, INFINIT );
...
}
这样的代码能够实现循环执行子线程嘛?
也就是每次ResumeThread之后子线程都能像被调用一次似的执行一遍嘛?
#7
1. 但是存在另外一个问题就是:
每次ResumeThread之后,子线程是重新执行一遍呢,还是从头到尾只执行一遍呢?
从上次执行为位置开始执行。
2.子线程中有大量的堆操作,如何使各个线程共享这些空间,就像单线程一样。
进程中的变量,各个线程都是可以访问到得,因为变量的地址在进程中是唯一的。
3. 这样的代码能够实现循环执行子线程嘛?
也就是每次ResumeThread之后子线程都能像被调用一次似的执行一遍嘛?
如果你仅仅是想让某个函数在子线程中循环执行,你没必要那样子做。在你的子线程设置一个循环,使用WaitForMutilpleObjects函数,接受主线程的控制。
每次ResumeThread之后,子线程是重新执行一遍呢,还是从头到尾只执行一遍呢?
从上次执行为位置开始执行。
2.子线程中有大量的堆操作,如何使各个线程共享这些空间,就像单线程一样。
进程中的变量,各个线程都是可以访问到得,因为变量的地址在进程中是唯一的。
3. 这样的代码能够实现循环执行子线程嘛?
也就是每次ResumeThread之后子线程都能像被调用一次似的执行一遍嘛?
如果你仅仅是想让某个函数在子线程中循环执行,你没必要那样子做。在你的子线程设置一个循环,使用WaitForMutilpleObjects函数,接受主线程的控制。