【发布时间】:2020-08-12 16:46:01
【问题描述】:
当我在一个线程中执行系统时,什么也没有发生。有解决办法吗?
#include <iostream>
#include <Windows.h>
using namespace std;
void runffplay()
{
const char* _cmd = "ffplay -fs -loop 0 \"D:\\dynamic wallpaper\\1.mp4\"";
system(_cmd);
}
CloseHandle(CreateThread(0, 0, (PTHREAD_START_ROUTINE)runffplay, 0, 0, 0));
【问题讨论】:
-
注意:
system接近于最糟糕的方式,您可以从程序中运行另一个可执行文件。您对其他进程的环境的控制非常有限,并且捕获它的输出的方法也非常有限。这是一个安全噩梦。不要使用system,永远不要使用。 -
您是否尝试过使用非常简单的方法(例如启动记事本)?如果您在
runffplay内放置一个诊断打印,会打印诊断消息吗?您可以做很多事情来帮助缩小问题范围,或者回答您自己的问题,或者将其变成一个更好的问题。 -
我不是 Win32 编程大师,所以我可能会遗漏一些小细节,但
void runffplay()不应该是void runffplay(void *)吗? Looks like I'm a little wrong。应该是DWORD runffplay(void *) -
Quoiting MS's documentation: 在创建线程时不要用
void返回类型声明这个回调函数并将函数指针转换为LPTHREAD_START_ROUTINE。执行此操作的代码很常见,但它可能会在 64 位 Windows 上崩溃。 阅读文档以查看它们是否明确告诉您不要做您正在做的事情总是好的。
标签: c++