Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > создание 2-го потока


Автор: kiler4747 27.8.2011, 17:25
У меня не получается создать 2-й поток. Программа выдает ошибку: Деактивируемый контекст активации не является последним активированным контекстом.
А если не выходить из 2-го потока то программа виснет. Мне нужно чтобы программа(sdi) при запуске создала 2-й поток и выполнила в нем функцию.

функция

Код

UINT __cdecl StartWithWindows( LPVOID paramm )
{
    wchar_t str[260];
    CArray<Project *> Stakc;
    GetCurrentDirectoryW(260, str);
    CString str1 = str;
    try
    {
        CFile file(str1 + L"\\" + L"temp.syn", CFile::modeRead);
        CArchive ar(&file, CArchive::load);
        try
        {
            Stakc.SetSize( ar.ReadCount() );
            for (int i = 0; i < Stakc.GetSize(); i++)
            {    
                Stakc[i] = new Project();
                Stakc[i]->Serialize(ar);
            }
            ar.Close();
            file.Close();
        }
        catch(...)
        {
            ar.Close();
            file.Close();
        }
    }
    catch(...) {}
    for (int i = 0; i < Stakc.GetCount(); i++)
    {
        if (Stakc[i]->AutoStartWithWindows)
            Stakc[i]->Run();
    }
    /*ExitThread(1);*/
    return 1;
}



создание 2-го потока
Код


int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
...
CWinThread * thread1 = AfxBeginThread(StartWithWindows, NULL);
    thread1->Run();
return 0;
}


Автор: Dem_max 28.8.2011, 05:16
может стоить компилить с ключом
Только одно, Опции проекта -> C/C++ -> Code Generation -> /MT или /MTd
С/C++ > Code Generation > Runtime library > Multi-threaded

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)