cari

Rumah  >  Soal Jawab  >  teks badan

c++ - Pengecualian WINAPI apabila memanggil SetConsoleHandler semasa menutup program

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.

仅有的幸福仅有的幸福2795 hari yang lalu692

membalas semua(1)saya akan balas

  • 怪我咯

    怪我咯2017-05-16 13:26:41

    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.

    balas
    0
  • Batalbalas