c++ - Pengecualian WINAPI apabila memanggil SetConsoleHandler semasa menutup program
仅有的幸福
仅有的幸福 2017-05-16 13:24:41
0
1
691

Saya menulis program yang menggunakan multi-threading untuk mendapatkan beberapa data dan kemudian menyimpannya dalam tatasusunan Kemudian apabila saya menutup program konsol, peristiwa telah dicetuskan, dan kemudian saya menulis data dalam tatasusunan ke fail dalam acara ini. .
Tetapi apabila saya menjalankan program ini kurang daripada 10 minit, menulis fail adalah perkara biasa Apabila saya menutup program selama lebih daripada 20 minit, ia hanya akan mengeluarkan beberapa fail dan kemudian program akan menutup sendiri.

Berikut ialah kod yang melibatkan tempat ini:
Ini ialah panggilan ke SetConsoleCtrlHandler dalam fungsi utama

int main(char*argv[], int argc)
{
    //当你关闭的时候做一些处理工作
    SetConsoleCtrlHandler(ConsoleHandler, TRUE);//接受控制台消息,做一些清理工作 
    
    //其他工作
}

Ini adalah pelaksanaan fungsi khusus

BOOL WINAPI ConsoleHandler(DWORD msgType)
{
    Print("I'm closing\n");
    if (msgType == CTRL_C_EVENT ||msgType == CTRL_CLOSE_EVENT)
    {
        if (g_hTDF)
        {
    
        WriteResult(str);//这里就是我把数组中的内容写入文件的程序

        Print("console Close complete!\n");
        system("pause");
        return TRUE;
    }
 
    return TRUE;
}

Ada sesiapa yang mengalami masalah ini?
Adakah ini berkaitan dengan penimbal atau sesuatu? Kerana secara intuitif, mungkin lebih banyak data diterima seiring dengan berlalunya masa.

仅有的幸福
仅有的幸福

membalas semua(1)
刘奇

CTRL_CLOSE_EVENT mempunyai mekanisme tamat masa, jadi tidak kira berapa lama masa yang diperlukan untuk menulis data, program akan ditutup selepas 5 saat.
Anda boleh menggunakan CTRL_C_EVENT sebaliknya.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan