- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
为了尝试如何使用 Win32 API 进行编程,我编写了一个创建进程的程序。然后我想检查我的进程是否等待新创建的进程,关闭句柄然后再次检查 WaitForSingleObject(第二个进程休眠 700 毫秒)
第一个过程:
#include <iostream>
#include <windows.h>
#include <string>
using namespace std;
void main()
{
bool ret;
bool retwait;
STARTUPINFO startupinfo;
GetStartupInfo (&startupinfo);
PROCESS_INFORMATION pro2info;
wchar_t wcsCommandLine[] = L"D:\\betriebssystemePRA1PRO2.exe";
ret = CreateProcess(NULL, wcsCommandLine, NULL, NULL, false, CREATE_NEW_CONSOLE, NULL,
NULL, &startupinfo, &pro2info);
cout<<"hProcess: "<<pro2info.hProcess<<endl;
cout<<"dwProcessId: "<<pro2info.dwProcessId <<endl;
if (retwait= WaitForSingleObject (pro2info.hProcess, INFINITE)==true)
cout<<"waitprocess:true"<<endl; //The process is finished
else
cout<<"waitprocess:false"<<endl;
CloseHandle (pro2info.hProcess);//prozesshandle schließen, "verliert connection"
if (retwait= WaitForSingleObject (pro2info.hProcess, INFINITE)==true) //When the process has finished
cout<<"waitprocess:true"<<endl;
else
cout<<"waitprocess:false"<<endl;
//cout<<GetLastError()<<endl; //Output the last error.
ExitProcess(0);
}
第二个过程:
#include <iostream>
#include <windows.h>
#include <string>
using namespace std;
void main()
{
int b;
b = GetCurrentProcessId();
cout << b << endl;
cout << "Druecken Sie Enter zum Beenden" << endl;
cin.get();
//Wait until the user confirms
Sleep (700);
ExitProcess(0);
cout<<"test";
}
第一个进程打印 false, false ;但它应该打印 true, false。
我用这个代替 if-else 语句:
//switch(WaitForSingleObject (pro2info.hProcess, INFINITE)){
// case WAIT_OBJECT_0: cout << "ja";
// break;
// case WAIT_FAILED:cout << "nein";
// break;
// case WAIT_TIMEOUT:
// break;
//}
// cout<<"waitprocess:true"<<endl;//prozess ist fertig
//else
// cout<<"waitprocess:false"<<endl;
这似乎有效。我的 if-else
语句做错了什么?
最佳答案
您真的需要注意 API 函数返回值的含义。您不能忽略 CreateProcess() 返回的 FALSE。 WaitForSingleObject() 可以返回多个值,如果等待成功完成则返回 0。这让你打印“假”。
关于c++ - 如何使用 WaitForSingleObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2554447/
这个问题已经有答案了: Why those two different behaviors with WaitForSingleObject function in CPP (2 个回答) 已关闭 5
今天我了解到我可以调用CreateIoCompletionPort(),然后将返回的HANDLE传递给WaitForSingleObject(): #include int main() {
今天我了解到我可以调用CreateIoCompletionPort(),然后将返回的HANDLE传递给WaitForSingleObject(): #include int main() {
我正在尝试唤醒我的电脑以防它进入休眠模式。我在某个网站上找到了这个代码片段,但我在最后添加的 Messagebox 总是立即返回。 我还在我的系统中启用了电源选项中的唤醒定时器。 [DllImport
我有两个功能: Fl_Thread n_create_thread(Fl_Thread &t, void *(*f) (void *), void *p) { return t = (Fl_T
下面的简单代码并没有像我预期的那样运行。它创建一个线程(挂起),启动它,等待它运行 1 毫秒并循环等待直到线程死亡或失败。 我希望输出是这样的: Start Callback running Call
我阅读了有关使用 WaitForSingleObject() 的不同主题,但我仍然不明白为什么我不能让它工作。我有一个使用 AfxBeginThread 更新的进度条,我想在执行另一个进程之前等待完成
h=CreateFile("c:\\test.txt",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_READONLY|FI
在 WinAPI 下有 WaitForSingleObject() 和 ReleaseMutex() 函数对。还有 Interlocked*() 函数族。我决定检查捕获单个互斥锁和交换互锁变量之间的性
我做 WaitForSingleObject(handle, timeout);如果在调用 WaitForSingleObject 之前 handle 已经发出信号,函数将返回什么? 我认为它应该立即
我正在使用 waitForAll 参数 = true 的 WaitForMultipleObject 函数。这里使用一个 std::vector 的 handle 对象来等待。如果这个函数超时了,那么
一些背景如果你感兴趣,否则你可以直接转到底部的问题: 我遇到了一个问题,我有一个无限的 while 循环,其中有两个 if 条件检查两个事件对象状态是否变为有信号。 while(1) { if
下面是一段代码。代码不完整,我省略了释放资源部分和QueryRes逻辑的实现。 #define N 5 /*simply resources manager which has N shared re
过去几天我一直在尝试为一个应用程序寻找一个好的架构,经过一些研究我终于卡住了,原因是 COM。 有问题的应用程序将有多个 GUI 线程,它们将为工作线程安排工作项。工作线程将通过 CoInitiali
我正在用 C 编写一个 win32 程序。 当您有多个线程在运行,并且其中一个线程正在等待一个事件(例如使用 WaitForSingleObject())时,该线程是否仍然获得其完整的 CPU 时间片
如果我设置 3 个线程等待释放互斥锁,它们是根据请求的顺序形成一个队列,还是未定义的行为(即我们不知道哪个会先接收它) ? 最佳答案 它在 SDK article 中明确记录: If more tha
在等待超时时间为零的事件时,WaitForSingleObject(或WaitForMultipleObjects)会导致上下文切换吗? (据我所知,Sleep(0) 将立即产生一个线程时间片。) 现
为了尝试如何使用 Win32 API 进行编程,我编写了一个创建进程的程序。然后我想检查我的进程是否等待新创建的进程,关闭句柄然后再次检查 WaitForSingleObject(第二个进程休眠 70
当您在使用 CreateFile() 或 _get_osfhandle() 创建的句柄上调用 WaitForSingleObject() 时会发生什么? 出于不值得解释的原因,我想使用 WaitFor
先仔细阅读问题。 有一个从 CTest 类的 CreateInstance 生成的工作线程。这是该类的原型(prototype)。 hThread 是线程句柄,hEventShutdown 是程序退出
我是一名优秀的程序员,十分优秀!