C中的多处理

Multiprocessing in C

我曾经看过一部电影叫"War Games"。我想在电影中模仿那个程序。我写了一个简单的程序,可以打印然后说出句子,反之亦然。我希望程序同时执行。我该怎么做?

#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);
    }
}

您希望说话是异步的

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

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

请注意,您需要先开始演讲,否则要等到打印完成后才能开始。

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