C++里怎么调用wait

 我来答
鹏鹏鹏666888
推荐于2016-11-29 · 知道合伙人互联网行家
鹏鹏鹏666888
知道合伙人互联网行家
采纳数:482 获赞数:3997
毕业于华南理工大学电子与信息学院,本科学位,目前就读于北京邮电大学信息与通信工程学院,硕士学位。

向TA提问 私信TA
展开全部

  创建子进程后,父进程具有监听子进程的运行状态的能力,用到的函数为:

  #include <sys/wait.h>
   pid_t wait(int *status);
   pid_t waitpid(pid_t pid, int *status, int options);

  以上函数用于等待子进程子进程旦凯轿的状态变化回调并且获取状态变化信息。所能获取到的状态变化包括:子进程运行结束、子进程被信号量暂停、子进程被信号量恢复运行。

  父进程执行了wait函数后,如果子进程已模肆经发生了状态变化,则wait函数立即就会有返回结果;否则wait函数会一直阻塞直至子进程状态发生变化。

  通常意义上,如果子进程已经发生了状态变化,但还未被父进程或其它系统回调执行wait,孙型则把此时的子进程称为是可等待的(waitable)。

  子进程运行结束后,父进行执行wait函数可以推动系统释放与子进程相关的资源;否则子进程将会被维持在僵尸进程的状态下一直存在。  

rui_xing_
2015-12-29 · 知道合伙人教育行家
rui_xing_
知道合伙人教育行家
采纳数:6306 获赞数:51261
在读博士研究生

向TA提问 私信TA
展开全部

创建子进程后,父进程具有监听子进程的运行状态的能力,用到中高搜的函数为:

  #include <sys/wait.h>
   pid_t wait(int *status);
   pid_t waitpid(pid_t pid, int *status, int options);

  以上函数用于等待子进程子进程的状态变化回调并卖历且获取状态变化信息。所能获取到的状态变化包括:子进程运行结束、子进程被信号量暂停、子进程被信号量恢复运行。

  父进程执行了wait函数后,如果子进程已经发生了状态变化,则wait函数立即就会有返回结果;否则wait函数会一直阻塞直至子进程状态发生变化。

  通常意义上,如果子进程已经发生了状态变化,但还未被父进程或其它系统回调执行wait,则把此时的子进程称为是可等待的(waitable)。

  子进念悔程运行结束后,父进行执行wait函数可以推动系统释放与子进程相关的资源;否则子进程将会被维持在僵尸进程的状态下一直存在。  

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
stp111
推荐于2018-03-09 · TA获得超过341个赞
知道小有建树答主
回答量:283
采纳率:0%
帮助的人:224万
展开全部
多线程液旦里的同步的wait API函坦搏数;
MSDN 里的说明:
To enter an alertable wait state, use the WaitForSingleObjectEx function. To wait for multiple objects, use the WaitForMultipleObjects.

Syntax
CopyDWORD WINAPI WaitForSingleObject(
__in HANDLE hHandle,
__in DWORD dwMilliseconds
);
Parameters
hHandle [in]
A handle to the object. For a list of the object types whose handles can be specified, see the following Remarks section.

If this handle is closed while the wait is still pending, the function's behavior is undefined.

The handle must have the SYNCHRONIZE access right. For more information, see Standard Access Rights.

dwMilliseconds [in]
The time-out interval, in milliseconds. If a nonzero value is specified, the function waits until the object is signaled or the interval elapses. If dwMilliseconds is zero, the function does not enter a wait state if the object is not signaled; it always returns immediately. If dwMilliseconds is INFINITE, the function will return only when the object is signaled.

========================================================
The WaitForSingleObject function can wait for the following objects:

•Change notification
•Console input
•Event
•Memory resource notification
•Mutex
•Process
•Semaphore
•Thread
•Waitable timer

MS的例子:

#include <windows.h>
#include <stdio.h>

#define THREADCOUNT 2

HANDLE ghMutex;

DWORD WINAPI WriteToDatabase( LPVOID );

int main( void )
{
HANDLE aThread[THREADCOUNT];
DWORD ThreadID;
int i;

// Create a mutex with no initial owner

ghMutex = CreateMutex(
NULL, // default security attributes
FALSE, // initially not owned
NULL); //闹信扰 unnamed mutex

if (ghMutex == NULL)
{
printf("CreateMutex error: %d\n", GetLastError());
return 1;
}

// Create worker threads

for( i=0; i < THREADCOUNT; i++ )
{
aThread[i] = CreateThread(
NULL, // default security attributes
0, // default stack size
(LPTHREAD_START_ROUTINE) WriteToDatabase,
NULL, // no thread function arguments
0, // default creation flags
&ThreadID); // receive thread identifier

if( aThread[i] == NULL )
{
printf("CreateThread error: %d\n", GetLastError());
return 1;
}
}

// Wait for all threads to terminate

WaitForMultipleObjects(THREADCOUNT, aThread, TRUE, INFINITE);

// Close thread and mutex handles

for( i=0; i < THREADCOUNT; i++ )
CloseHandle(aThread[i]);

CloseHandle(ghMutex);

return 0;
}

DWORD WINAPI WriteToDatabase( LPVOID lpParam )
{
// lpParam not used in this example
UNREFERENCED_PARAMETER(lpParam);

DWORD dwCount=0, dwWaitResult;

// Request ownership of mutex.

while( dwCount < 20 )
{
dwWaitResult = WaitForSingleObject(
ghMutex, // handle to mutex
INFINITE); // no time-out interval

switch (dwWaitResult)
{
// The thread got ownership of the mutex
case WAIT_OBJECT_0:
__try {
// TODO: Write to the database
printf("Thread %d writing to database...\n",
GetCurrentThreadId());
dwCount++;
}

__finally {
// Release ownership of the mutex object
if (! ReleaseMutex(ghMutex))
{
// Handle error.
}
}
break;

// The thread got ownership of an abandoned mutex
// The database is in an indeterminate state
case WAIT_ABANDONED:
return FALSE;
}
}
return TRUE;
}

参考资料: MSDN

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
605351006
2011-06-04 · 超过22用户采纳过TA的回答
知道答主
回答量:96
采纳率:0%
帮助的人:58.6万
展开全部
wait() ;不是c++的函数。是windows的函数所以伍运#include<windows.h>搭镇就可以知橘粗了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友d5be4c8
2011-06-03 · 超过12用户采纳过TA的回答
知道答主
回答量:58
采纳率:0%
帮助的人:35.6万
展开全部
把windows库加进去,#include<windows.h>
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式