suspendthread(suspendthread loop failed翻译)
mfc中使用SuspendThread无法挂起线程
你是做医疗器械的吗?在做监护仪程序??
SuspendThread 的原形是:DWORD SuspendThread(HANDLE hThread);它返回的是线程的前一个暂停记数.线程暂停的次数可以是MAXIMUM_SUSPEND_COUNT次(在WINNT.H中是127);SuspendThread与内核方式的执行是异步的,但是在线程恢复运行之前,不会发生用户方式的执行。调用SuspendThread必须小心,如果线程试图从堆栈中分配内存,那么该线程将在该线程上设置一个锁,当其他线程试图访问该堆栈时,这些线程的访问就被停止,直到第一个线程恢复运行,只有知道目标线程在干什么时,并且采取强有力的措施避免因暂停线程带耒的问题或死锁状态,SuspendThread才是安全的。
线程怎么暂停和恢复?
暂停线程执行的API函数是SuspendThread,声明如下:
DWORD SuspendThread(HANDLEhThread);
其中,参数hThread是要暂停的线程句柄,该句柄必须要有THREAD SUSPEND RESUME访问权限。如果函数成功就返回以前暂停的次数,否则返回-1,此时可以用GetLastError来获得错误码。当函数成功的时候,线程将暂停执行,并且线程的暂停次数递增一次。每个线程都有一个暂停计数器,最大值为MAXIMUMSUSPENDCOUNT,如果暂停计数器大于零,线程则暂停执行。另外,这个函数一般不用于线程同步,如果对一个拥有同步对象(比如信号量或临界区)的线程调用SuspendThread函数,则有可能会引起死锁,尤其当被暂停的线程想要获取同步对象的时候。恢复线程执行的函数是ResumeThread,但不是说调用该函数线程就会恢复执行,该函数主要是减少暂停计数器的次数。线程的暂停计数器如果恢复到零,线程才会恢复执行。
暂停线程执行的API函数是SuspendThread,声明如下:
DWORD SuspendThread(HANDLEhThread);
其中,参数hThread是要暂停的线程句柄,该句柄必须要有THREAD SUSPEND RESUME访问权限。如果函数成功就返回以前暂停的次数,否则返回-1,此时可以用GetLastError来获得错误码。当函数成功的时候,线程将暂停执行,并且线程的暂停次数递增一次。每个线程都有一个暂停计数器,最大值为MAXIMUMSUSPENDCOUNT,如果暂停计数器大于零,线程则暂停执行。另外,这个函数一般不用于线程同步,如果对一个拥有同步对象(比如信号量或临界区)的线程调用SuspendThread函数,则有可能会引起死锁,尤其当被暂停的线程想要获取同步对象的时候。
恢复线程执行的函数是ResumeThread,但不是说调用该函数线程就会恢复执行,该函数主要是减少暂停计数器的次数。线程的暂停计数器如果恢复到零,线程才会恢复执行。
WIN32 SuspendThread/ResumeThread 在 pthread下有什么方法代替
#include pthread.h
//挂起当前线程
int pthread_join(pthread_t th,void **thread_return);
//让线程分离
int pthread_detach(pthread_t th);
关于pthread函数族有很多函数
查看一下pthread.h或google搜一下
这方面介绍很多