powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вылетает поток
13 сообщений из 13, страница 1 из 1
Вылетает поток
    #38118720
antake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

У меня следующая проблема.
Создаю новый поток с помощью CreateThread. В процессе выполнения он доходит до строк (это уже не стартовая функция потока):

wstring Classpath = L"\0";
Classpath.append(NUTCH_HOME);
Classpath.append(L"\\conf;");
Classpath.append(JAVA_HOME);
Classpath.append(L"\\lib\\tools.jar");
wstring NutchLibs;
NutchLibs.append(NUTCH_HOME);

На одной из строк append в дебаге просто вылетает. Значения NUTCH_HOME и JAVA_HOME он видит.
Если CreateThread не делать, а просто запустить стартовую функцию потока, все работает нормально.

Подскажите, пожалуйста, если у кого есть идеи.
...
Рейтинг: 0 / 0
Вылетает поток
    #38118724
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antakeСоздаю новый поток с помощью CreateThread.

При этом прочитать описание этой функции - забыл. А там ясно написано, что тот, кто
использует RTL - должен использовать _beginthread(). Иначе будет больно. Что ты и
наблюдаешь на собственной шкуре.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вылетает поток
    #38118745
antake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо.
Правда, результат тот же, но ошибка была, да.
...
Рейтинг: 0 / 0
Вылетает поток
    #38118755
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antakeЗначения NUTCH_HOME и JAVA_HOME он видит.

А они доживают до момента, когда на них смотрит? Покажи объявления.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вылетает поток
    #38118799
antake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Определены в другом файле, как
const wchar_t* NUTCH_HOME = L"c:\\cygwin\\home\\nutch\0";
wchar_t* JAVA_HOME = L"C:\\cygwin\\home\\java\\jre6\0";

Объявлены здесь:
extern const wchar_t* NUTCH_HOME;
extern wchar_t* JAVA_HOME;

Доживают, я по дебагу смотрел.
Последние разы вылетал после строки
Classpath.append(L"\\lib\\tools.jar");

Думаю, что еще какая-то нубская ошибка есть. Я первый раз что-то с потоками на плюсах делаю.
...
Рейтинг: 0 / 0
Вылетает поток
    #38118875
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antakeСпасибо.
Правда, результат тот же, но ошибка была, да.

Потому что функция на самом деле должна быть

_beginthreadex()
...
Рейтинг: 0 / 0
Вылетает поток
    #38118877
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antake
Думаю, что еще какая-то нубская ошибка есть. Я первый раз что-то с потоками на плюсах делаю.

Так давай весь код, что тут...
...
Рейтинг: 0 / 0
Вылетает поток
    #38118880
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
wstring Classpath = L"\0";
Classpath.append(NUTCH_HOME);



По крайней мене первая строчка кажется странной.
Что ты хотел ею сказать ?
wstring инициализировать пустой строкой не нужно, само сделается так.

Пустая строка -- это L"" , что же такое L"\0" ?
Наипустейшая строка ? Зачем ?
...
Рейтинг: 0 / 0
Вылетает поток
    #38119177
antake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, спасибо, я уже чуток подисправлял.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
HRESULT __stdcall CCrawler::Start(const BSTR InputFilePath) 
{
    CCommand Command;
    CParams* Params = new CParams(L"D:\\today\\crawl", L"D:\\today\\urls", 10, 1, 1000);
    _beginthreadex(0,165000, StartCrawl, Params, 0, 0);
    
    return S_OK;
}
///////////////// это вызов потока. 
 
unsigned int WINAPI StartCrawl(LPVOID lpParam)
{
    CParams* Params = static_cast<CParams*>(lpParam);
 
        CRedirector Redirector;
        CCommand Command;
            Command.CreateInjectCommand( L"D:\\today\\urls", L"D:\\today\\crawl").data();// вылетает внутри
 
    return 0;
}
 
// это стартовая функция потока
 
const wstring CCommand::CreateInjectCommand(const wstring& URLDir, const wstring& CrawlDir )
{
    return ( CreateJavaCommand(L"inject") + L" " + CrawlDir + L" " + URLDir );
}
 
const wstring CCommand::CreateJavaCommand( wstring command )
{
    wstring Command(JAVA_HOME);
    Command.append(L"\\bin\\java ");
    Command.append(L"-classpath ");
    Command.append(CreateClasspath()); // внутри CreateClasspath вылетает
    Command.append(L" ");
    Command.append(CreateClass(command.data()));
    Command.append(L" ");   
    return Command;
}
 
onst wstring CCommand::CreateClasspath()
{
    wstring Classpath;
    Classpath.append(NUTCH_HOME);
    Classpath.append(L"\\conf;");
    Classpath.append(JAVA_HOME);
    Classpath.append(L"\\lib\\tools.jar"); //летит на этой строчке
 
    wstring NutchLibs;
    NutchLibs.append(NUTCH_HOME);
    NutchLibs.append(L"\\lib\\");
    AppendAllFiles(Classpath, NutchLibs,L"jar");
 
    WIN32_FIND_DATA data;
    wstring NutchPlugins;
    NutchPlugins.append(NUTCH_HOME);
    NutchPlugins.append(L"\\plugins");
    FindFirstFile(NutchPlugins.data(), &data);
    
    int dirflag = FILE_ATTRIBUTE_DIRECTORY;
 
    if ( ( data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) != 0 ) {
        NutchPlugins.append(L"\\");
        AppendAllFiles(Classpath, NutchPlugins, L"jar");
    } 
 
    return Classpath;
...
Рейтинг: 0 / 0
Вылетает поток
    #38119297
antake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще раз спасибо за помощь.
Первая ошибка была в том, что надо использовать _beginthreadex вместо CreateThread
Вторая - я неправильно дебажил, точно остановки недорасставлял, поток выполнялся, когда я отладку уже закончил.
...
Рейтинг: 0 / 0
Вылетает поток
    #38119521
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
antake,

unsigned int WINAPI StartCrawl(LPVOID lpParam)

-- оно нифига не WINAPI должно быть. Сигнатура другая там должна быть.
...
Рейтинг: 0 / 0
Вылетает поток
    #38119531
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
unsigned int WINAPI StartCrawl(LPVOID lpParam)
{
    CParams* Params = static_cast<CParams*>(lpParam);
 
        CRedirector Redirector;
        CCommand Command;
            Command.CreateInjectCommand( L"D:\\today\\urls", L"D:\\today\\crawl").data();// вылетает внутри
 
    return 0;
}



Params -- память нигде не удаляется.
...
Рейтинг: 0 / 0
Вылетает поток
    #38119537
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
Classpath.append(L"\\lib\\tools.jar"); //летит на этой строчке



Пока не верю...
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вылетает поток
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]