Leonid Kudryavtsev |
---|
Сорри, ступил. Is_ptr ты в качестве параметра кидаешь (не понятно зачем, т.к. по sizeof ты же все равно знаешь, поместилось в указатель или нет). |
Это не ключевой момент в данном случае, надо было выкинуть, копипастил с рабочего кода. Is_ptr рождается динамически, true - указатель, надо освободить память.
Leonid Kudryavtsev |
---|
Да... еще очень веселая ошибка: error C2664 в MS VC
1) с (int*) код перестает быть универсальным. Кроме int, ничего другого (например bool) передать через указатель не получится. То есть, не понятно, нахрена козе баян. 2) зачем везде reference ? почему не использовать вместо этого ООП убожества нормальные C-ные ссылки? |
MS VC 2008 Express никаких ошибок. на *(T*)& есть warning C4739: reference to variable 'value' exceeds its storage space, это понтно. Почему и спрашивал что не сглючит. У тебя какой MS VC? Текст ошибки желательно.
1. Как уже написал: указатели, структуры или индексы массивов. 4 байта во всех случаях. Я же для себя, bool на int можно заменить, все равно выравнивание до 4 байт.
2. Не совсем понял о чем речь. Стремился вот к чему:
Обычный подход: если одно и тоже написано дважды, то на третий раз надо обобщать. Дважды уже написано, надо третий, вот и занялся. Создание потока, эвенты и критические секции для межпотоковой синхронизации, цикл с ожиданием, куча хрени которую надо спрятать.
Убил день вместо копипаста за полчаса, но не жалею. В итоге:
#include "izvrat.h"
void int_worker(int& task)
{
printf("work %d\n", task);
}
int main(int argc, char* argv[])
{
my_worker_t mw = {0};
thread_worker_create(mw, int_worker);
for(int i = 1; i < 10; i++) {
worker_add(mw, i);
}
thread_worker_stop(mw);
}
Красота :)