Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вылетает поток / 13 сообщений из 13, страница 1 из 1
21.01.2013, 20:54
    #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
21.01.2013, 21:00
    #38118724
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вылетает поток
antakeСоздаю новый поток с помощью CreateThread.

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

А они доживают до момента, когда на них смотрит? Покажи объявления.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
21.01.2013, 22:20
    #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
22.01.2013, 00:23
    #38118875
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вылетает поток
antakeСпасибо.
Правда, результат тот же, но ошибка была, да.

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

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

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



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

Пустая строка -- это L"" , что же такое L"\0" ?
Наипустейшая строка ? Зачем ?
...
Рейтинг: 0 / 0
22.01.2013, 11:04
    #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
22.01.2013, 11:50
    #38119297
antake
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вылетает поток
Еще раз спасибо за помощь.
Первая ошибка была в том, что надо использовать _beginthreadex вместо CreateThread
Вторая - я неправильно дебажил, точно остановки недорасставлял, поток выполнялся, когда я отладку уже закончил.
...
Рейтинг: 0 / 0
22.01.2013, 13:24
    #38119521
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вылетает поток
antake,

unsigned int WINAPI StartCrawl(LPVOID lpParam)

-- оно нифига не WINAPI должно быть. Сигнатура другая там должна быть.
...
Рейтинг: 0 / 0
22.01.2013, 13:26
    #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
22.01.2013, 13:28
    #38119537
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вылетает поток
Код: plaintext
1.
Classpath.append(L"\\lib\\tools.jar"); //летит на этой строчке



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


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