【问题标题】:Multiprocessing in CC中的多处理
【发布时间】:2015-10-05 09:22:34
【问题描述】:

我曾经看过一部叫《战争游戏》的电影。我想模仿电影中的那个程序。我写了一个简单的程序,可以打印然后说出句子,或者反过来。我希望程序同时执行两者。我该怎么做?

#include <stdio.h>
#include <wchar.h>
#include <string.h>
#include <Windows.h>
#include <sapi.h>

ISpVoice *pVoice = NULL;

void printSmoothly(wchar_t *Str);

int main(void)
{
    if (FAILED(::CoInitialize(NULL)))
        return FALSE;

    HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, 
                    IID_ISpVoice, (void **)&pVoice);

    wchar_t *sentence = L"Greetings professor falken,What would you like to do ?";

    // how can i execute these two at the same time ?
    printSmoothly(sentence);
    pVoice->Speak(sentence, 0, NULL);

    pVoice->Release();

    CoUninitialize();

    return 0;
}

void printSmoothly(wchar_t *Str)
{
    size_t len = wcslen( Str ) , n ;

    for( n = 0 ; n < len ; n++ )
    {
        wprintf( L"%c", Str[n] );

        Sleep(50);
    }
}

【问题讨论】:

  • 您所说的“C/C++”是什么?您真正使用哪种语言?
  • 我更喜欢 C,你知道的。
  • 那么让我们开始吧。包括wchar.h,将“C/C++”更改为“C”并删除c++ 标签。然后你将不得不对这些成员函数做一些事情。

标签: c windows multiprocessing sapi


【解决方案1】:

你希望说话是异步的

幸运的是,Speak 对此有一个标志,因此您还不需要深入研究多处理:

pVoice->Speak(sentence, SPF_ASYNC, NULL);
printSmoothly(sentence);

请注意,您需要先开始演讲,否则在打印完成之前不会开始。

您还需要注意在演讲结束之前不要ReleaseCoUninitialize
例如,如果您的打印速度比语音快,就会发生这种情况。
(异步编程在现实中比在好莱坞要难得多。)

【讨论】:

  • 这不是很有效。我尝试了一个带有'\n'字符的句子,它在阅读整个内容之前就停止了说话。
  • 这听起来像是一个关键的错误,而不是低效率。
  • 我调整了时间范围,并在'\n;字符。你的答案是可以接受的。
猜你喜欢
  • 2017-11-06
  • 1970-01-01
  • 2019-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-14
相关资源
最近更新 更多