Windows-CreateProcess-lpsiStartInfo-STARTUPINFO-dwFlags

dwFlags:

简单地告诉CreateProcess函数结构中哪些成员有效:

STARTF_USESIZE:使用dwXSize和dwYSize

STARTF_USESHOWWINDOWS: wShowWindow

STARTF_USEPOSITION: dwX and dwY

STARTF_USECOUNTCHARS: dwXCountChars and dwYCountChars

STARTF_USEFILLATTRIBUTE: dwFillAttribute

STARTF_USESTDHANDLES: hStdInput, hStdOutput and hStdError

-------------------------------------------------------------------------------------------------------------------------------------------

标 志                            含 义
S TA RT F _ U S E S I Z E              使用d w X S i z e和d w Y S i z e成员
S TA RT F _ U S E S H O W W I N D O W          使用w S h o w Wi n d o w成员
S TA RT F _ U S E P O S I T I O N           使用d w X和d w Y成员
S TA RT F _ U S E C O U N T C H A R S           使用d w X C o u n t C h a r s和dwYCount Chars成员
S TA RT F _ U S E F I L L AT T R I B U T E        使用d w F i l l A t t r i b u t e成员
S TA RT F _ U S E S T D H A N D L E S                  使用h S t d I n p u t、h S t d O u t p u t和h S t d E r r o r成员
S TA RT F _ R U N _ F U L L S C R E E N                         强制在x 8 6计算机上运行的控制台应用程序以全屏幕方式启动运行

转载于:https://www.cnblogs.com/kingjhs/p/3367254.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段代码中存在一些语法错误和逻辑问题,应该修改为以下形式: ``` // 推流线程 DWORD WINAPI push_func(LPVOID args) { // 启动ffmpeg子进程 HANDLE pipeRead, pipeWrite; SECURITY_ATTRIBUTES sa; sa.nLength = sizeof(sa); sa.lpSecurityDescriptor = NULL; sa.bInheritHandle = TRUE; CreatePipe(&pipeRead, &pipeWrite, &sa, 0); STARTUPINFO si; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); si.dwFlags = STARTF_USESTDHANDLES; si.hStdInput = pipeRead; PROCESS_INFORMATION pi; ZeroMemory(&pi, sizeof(pi)); LPSTR cmd = "ffmpeg -f rawvideo -vcodec rawvideo -pix_fmt bgr24 -s 640x480 -r 30 -i - -c:v libx264 -preset ultrafast -f flv rtmp://server/live/streamName"; BOOL success = CreateProcess(NULL, cmd, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi); if (!success) { printf("Failed to create process. Error code: %d\n", GetLastError()); return 1; } while (true) { EnterCriticalSection(&mtx); SleepConditionVariableCS(&cond, &mtx, INFINITE); LeaveCriticalSection(&mtx); // 写帧数据到管道 DWORD dwWritten; WriteFile(pipeWrite, frame.data, frame.total() * frame.elemSize(), &dwWritten, NULL); } CloseHandle(pipeRead); CloseHandle(pipeWrite); return 0; } ``` 主要修改包括: 1. 声明 `pipeRead` 和 `pipeWrite` 两个管道句柄变量,并且使用 `CreatePipe` 函数创建匿名管道。 2. 声明 `sa` 变量为 `SECURITY_ATTRIBUTES` 结构体类型,并且使用默认值初始化。 3. 将管道句柄传递给 `STARTUPINFO` 的 `hStdInput` 字段。 4. 将 `CreateProcess` 函数的返回值保存到 `success` 变量中,并且添加错误处理逻辑。 5. 在循环中使用 `EnterCriticalSection` 和 `LeaveCriticalSection` 函数进行互斥访问。 6. 最后关闭管道句柄。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值