Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.116.85.72] |
|
Сообщ.
#1
,
|
|
|
Есть DLL, в ней создаю поток, который выполняет основные действия. Понадобилось параллельно выполнять еще действия, создал второй поток, но при запуске двух потоков одновременно, то и 1 перестает работать. Если не запускать второй поток, то первый выполняется хорошо. Для примера создал второй поток, который ничего не делает, но все равно не работает.
TMyThread = class(TThread) protected procedure Execute; override; end; TMyThread2 = class(TThread) protected procedure Execute; override; end; var MyThread: TMyThread; MyThread2: TMyThread2; ... procedure TMyThread.Execute; var msg: TMSG; FComponentUSB: TComponentUSB; begin FComponentUSB := TComponentUSB.CreatE(nil); try PeekMessage(msg, 0, 0, 0, PM_NOREMOVE); while not Terminated and GetMessage(msg, 0, 0, 0) do begin TranslateMessage(msg); DispatchMessage(msg); end; finally FComponentUSB.Free; end; end; procedure TMyThread2.Execute; begin while true do begin sleep(1000); end; end; begin MyThread := TMyThread.Create(False); MyThread2 := TMyThread2.Create(False); end. Может я чего-то не понимаю, но по идее, потоки не должны блочить друг друга или основной поток. Можете помочь разобраться ? |
Сообщ.
#2
,
|
|
|
Да, представленный кусок должен работать.
Поменяй во 2м потоке while True на while not Terminated для фэншуйности. А "перестает работать" - это что? Не запускается Execute, не выполняет обработку сообщений? Детали нужны |
Сообщ.
#3
,
|
|
|
немног предисловие
поток 1 - мониторит подключение усб поток 2 - пустой (для тестов, а вообще должен мониторить подключение nas через кмд) итак, путем тестов понял, что, когда запускаю сразу 2 потока именно первый коннект усб не видит, а последующие видит нормально, а если запускать только поток 1, то первый и последующие коннекты флэхи видит без проблем. Более подробно stackoverflow Может вы мне сможете помочь разобраться ? |
Сообщ.
#4
,
|
|
|
1) Надо проверять результат USBRegister, а то мало ли что.
2) Надо отследить, где конкретно затыкается: правильно ли иниц-лась выборка сообщений? Сообщение вообще не приходит в GetMessage? Сообщение не передается в WndProc? Сообщение отбраковывается в WMDeviceChange? |
Сообщ.
#5
,
|
|
|
Цитата Fr0sT @ 1) Надо проверять результат USBRegister, а то мало ли что. сделал, чтоб выводило результат USBRegister, заинжектил длл, вставил влэху, и только потом высветился результат USBRegister. Если ожидать появления результата, а только потом вставлять флэшку, то все норм (логично), но немного странно было, что все последующие разы быстро выводился результат USBRegister (1-2 сек, хотя при первом тесте заняло порядка 5-6). Видимо, когда запускаю 2 потока для USBRegister требуется больше времени, что странно, ведь запускаю 2 не связных потока. Спасибо большое, что не прошли мимо и помогли, если что - я отпишусь |